Создание нового столбца на основе других столбцов в фрейме данных R - PullRequest
0 голосов
/ 06 мая 2020

У меня есть фрейм данных, который выглядит следующим образом:

df <- data.frame('col1'=c(1,2,2,4,5), 'col2'=c(4,9,3,5,13), 'col3'=c(3,5,8,7,10))
> df
  col1 col2 col3
1    1    4    3
2    2    9    5
3    2    3    8
4    4    5    7
5    5   13   10

Я хочу создать новый столбец со значением 1, если хотя бы одно значений в строке больше или равно 8 и значение 0, если все значений в строке меньше 8. Таким образом, окончательный результат будет выглядеть примерно так:

> df
  col1 col2 col3  new
1    1    4    3    0 
2    2    9    5    1
3    2    3    8    1
4    4    5    7    0
5    5   13   10    1

Спасибо !

Ответы [ 3 ]

1 голос
/ 06 мая 2020

Использование rowSums.

df$new <- +(rowSums(df>=8, na.rm=TRUE) > 0); df
  col1 col2 col3 new
1    1    4    3   0
2    2    9    5   1
3    2    3    8   1
4    4    5    7   0
5    5   13   10   1
1 голос
/ 06 мая 2020

Это работает:

df$new <- apply(df, 1, function(x) max(x >= 8))
df
#   col1 col2 col3 new
# 1    1    4    3   0
# 2    2    9    5   1
# 3    2    3    8   1
# 4    4    5    7   0
# 5    5   13   10   1
0 голосов
/ 06 мая 2020

Как вариант, используя умножение матриц

df$new <- as.numeric(((df >= 8) %*% rep(1, ncol(df))) > 0)
df
  col1 col2 col3 new
1    1    4    3   0
2    2    9    5   1
3    2    3    8   1
4    4    5    7   0
5    5   13   10   1

# Or logical column
df$new <- ((df >= 8) %*% rep(1, ncol(df))) > 0
df
  col1 col2 col3   new
1    1    4    3 FALSE
2    2    9    5  TRUE
3    2    3    8  TRUE
4    4    5    7 FALSE
5    5   13   10  TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...