сравнение нескольких столбцов, включая NA, в кадре данных R - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть фрейм данных, включающий 1,2 и несколько NA

Я хотел бы сравнить эти столбцы и сохранить результаты в новом столбце (скажем, F), чтобы: если в каждой строке все значения Если 1, то новый столбец получит 1 для той же строки, если все значения равны 2, затем назначьте 2 для той же строки в новом столбце, если числа разные (комбинация 1 и 2), назначьте новый номер, например 3, в новом

У вас есть идеи, как это можно сделать?

1 Ответ

0 голосов
/ 07 февраля 2020

Попробуй это. Если дисперсия равна 0, то новый столбец равен среднему значению. Если это не так, то новый столбец равен сумме уникальных значений (2,2,4 = 6). Если есть только одно не-NA значение в строке, дисперсия не будет работать, поэтому первый оператор «if» позаботится об этом.

df<-as.data.frame(matrix(c(1, 1, 1, NA, NA, NA, 2, 2, NA, NA, NA, NA, 3, 2, 1, 2, NA, NA, 4, 2, NA, 2, NA, NA, 5, 1, NA, NA, NA, NA),ncol=5, byrow = T))

colnames(df)<- c("A","B","C","D","F")

df

for (i in 1:nrow(df)){ if (length(as.numeric(df[i,1:5])[!is.na(as.numeric(df[i,1:5]))])==1){df[i,"col3"]<-as.numeric(df[i,1:5])[!is.na(as.numeric(df[i,1:5]))]}<br> else if (var(as.numeric(df[i,1:5]),na.rm = T)==0){df[i,"col3"]<-mean(as.numeric(df[i,1:5]),na.rm = T)} else if (var(as.numeric(df[i,1:5]),na.rm = T)!=0){df[i,"col3"]<-sum(unique(as.numeric(df[i,1:5])),na.rm = T)} }

df

* Обновлено для работы с более чем двумя столбцами.

...