#r #count #na #addition #subtraction
#r #подсчитать #na #сложение #вычитание
Вопрос:
кто-нибудь может помочь?
У меня есть набор данных
x <- data.frame(A = c(NA, '1', '0', '0'),
B = c('0', '0', '0', NA),
C = c('1', NA, NA, NA))
Мне нужно сгенерировать что-то вроде этого (сгенерировать две переменные x5 и x6):
_ x1 x2 x3 x4 x5 x6
A NA 1 0 0 1 2
B 0 0 0 NA 0 3
C 1 NA NA NA 1 0
Спасибо
Комментарии:
1. В чем смысл
x5
иx6
? Как вы получаете значения в этих двух столбцах?2. Это то, что я хочу знать. x5 — это количество единиц, x6 — это количество единиц, которые мне нужны для генерации x5 и x6
Ответ №1:
Я заметил комментарий о том, что вы все еще работаете над этим. Ответ от @ThomasIsCoding работает просто отлично, но на всякий случай, вот альтернативный, пошаговый подход, который вы также можете рассмотреть.
Сначала транспонируйте ваш фрейм данных (мы вызовем df
):
df <- as.data.frame(t(x))
df
V1 V2 V3 V4
A <NA> 1 0 0
B 0 0 0 <NA>
C 1 <NA> <NA> <NA>
Теперь для 2 дополнительных столбцов используйте rowSums
для суммирования значения «1» и «0». Вам нужно na.rm = TRUE
заданное присутствие NA
в ваших данных. Значение 1:4
представляет первые четыре столбца.
df$V5 <- rowSums(df[,1:4] == "1", na.rm = T)
df$V6 <- rowSums(df[,1:4] == "0", na.rm = T)
df
Вывод
V1 V2 V3 V4 V5 V6
A <NA> 1 0 0 1 2
B 0 0 0 <NA> 0 3
C 1 <NA> <NA> <NA> 1 0
Ответ №2:
Может быть, вы можете попробовать приведенный ниже код
setNames(
cbind(
data.frame(t(x)),
t(sapply(x, function(v) table(factor(na.omit(v), levels = c(1, 0)))))
),
paste0("x", 1:6)
)
что дает
x1 x2 x3 x4 x5 x6
A <NA> 1 0 0 1 2
B 0 0 0 <NA> 0 3
C 1 <NA> <NA> <NA> 1 0
Комментарии:
1. Привет, прошу прощения, я очень новичок в R… Где в кодировке я должен добавить ‘x’? Мой набор данных огромен, поэтому мне нужно будет определить используемые переменные.
2. @Alessa
x
— это префикс имен столбцов, который добавляется при использованииsetNames
3. Я знаю, но я бы вставил первое имя столбцов?
4. Что вы имеете в виду под «вставить первое имя столбцов»? @Alessa
5. Я имею в виду, что в моем примере я бы написал setNames(cbind( test.df(t(x1)), t(sapply(x1, таблица функций (v)(factor(na.omit(v), levels = c(1, 0))))) ), вставка0(«x», 1: 6) )