Создание переменной для подсчета количества нулевых значений по переменным, встречающимся в каждом наблюдении- R - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь найти способ сделать это в R, и я не могу понять это из-за моей жизни. Допустим, у меня есть df, состоящий из следующих элементов:

v1<- c(0, 0, 2, 0 1 3)
v2<- c(1, 0, 8, 1 ,0)
v3<- c(0, 1, 3, 0, 0)
v4<- c(0, 0, 0, 0, 0)
df<- data.frame(v1, v2,v3, v4)

Я хочу создать новую переменную, скажем, num_zeros, которая будет считать число 0 для каждого наблюдения от v1 до v3. Есть ли быстрый способ сделать это? Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Мы можем использовать rowSums для логического matrix, чтобы получить счетчик значений 0 и присвоить его столбцу 'num_zeros'

df$num_zeros <- rowSums(df[c('v1', 'v2', 'v3')] == 0)

Или другой вариант -

df$num_zeros <- (df$v1 == 0) + (df$v2 == 0) + (df$v3 == 0)

ПРИМЕЧАНИЕ. Оба метода эффективны и векторизованы

0 голосов
/ 30 апреля 2020

Мы можем использовать apply в ряд:

cols <- paste0('v', 1:3)
df$num_zeros <- apply(df[cols] == 0, 1, sum)

Или с lapply:

df$num_zeros <- Reduce(`+`, lapply(df[cols], `==`, 0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...