Я хочу, чтобы вычислить среднее значение нескольких переменных, но с условием, если 2 из этих столбцов есть NA, значит, будет NA, если меньше, чем 2, найти в видеВычислить среднее многозарядных столбцов с условием в R
df <- data.frame(ID = c(1:10),X1 = c(rep(1,5),rep(2,5)),X2 = c(1:10),X3 = c(1,NA,2,NA,NA,1,NA,2,NA,NA),X4 = c(rep(NA,10)),X5=c(rep(1,5),rep(NA,5)),
Y1 = c(rep(1,5),rep(2,5)),Y2 = c(1:10),Y3 = c(1,NA,2,NA,NA,1,NA,2,NA,NA),Y4 = c(rep(NA,10)),Y5=c(rep(1,5),rep(NA,5)))
MeanX = round(apply(df[,c(2:6)],1, mean,na.rm = TRUE),2)
MeanY = round(apply(df[,c(7:11)],1,mean,na.rm = TRUE),2)
Это вывод, что это неправильно
ID X1 X2 X3 X4 X5 Y1 Y2 Y3 Y4 Y5 MeanX MeanY
1 1 1 1 1 NA 1 1 1 1 NA 1 1.00 1.00
2 2 1 2 NA NA 1 1 2 NA NA 1 1.33 1.33*
3 3 1 3 2 NA 1 1 3 2 NA 1 1.75 1.75
4 4 1 4 NA NA 1 1 4 NA NA 1 2.00 2.00*
5 5 1 5 NA NA 1 1 5 NA NA 1 2.33 2.33*
6 6 2 6 1 NA NA 2 6 1 NA NA 3.00 3.00*
7 7 2 7 NA NA NA 2 7 NA NA NA 4.50 4.50 *
8 8 2 8 2 NA NA 2 8 2 NA NA 4.00 4.00 *
9 9 2 9 NA NA NA 2 9 NA NA NA 5.50 5.50 *
10 10 2 10 NA NA NA 2 10 NA NA NA 6.00 6.00 * This is supposed NA,bc there are 3 columns have NA
Потому что у меня есть большой набор данных, для каждой группы иногда я должен установить 6 из 20, иногда 1 из 10, так что я могу вычислить среднее, как я могу установить условие для этого случая.
Вы можете попробовать что-то вроде 'df $ meanX = apply (df [, 2: 6], 1, function (x) ifelse (sum (is.na (x)) <2, mean (x, na.rm = TRUE), NA)) 'где вы можете заменить 2 этим максимальным числом NA – Vandenman
' rowMeans' также может вас заинтересовать. – thelatemail
Это немного неразборчиво, но должно быть довольно быстро (особенно если вы конвертируете в матрицу вместо использования фрейма данных): 'MeanX = round (rowMeans (df [, c (2: 6)], na.rm = TRUE), 2) * c (1, NA) [(rowSums (is.na (df [, c (2: 6)]))> 2) + 1] ' – Gregor