2013-09-19 2 views
2

У меня есть матрица символов, и есть множество НС. Я хотел бы создать новую переменную, которая объединяет все (не-NA) строки в одну. Так что отКомбинированные факторы с NA

(df = data.frame(matrix(c("A", "B", "C", NA, NA, "E", NA, "D", "A", "C", "B", "C", NA, "C", "A"), ncol = 3))) 

    X1 X2 X3 
1 A E B 
2 B <NA> C 
3 C D <NA> 
4 <NA> A C 
5 <NA> C A 

тогда я бы

 X1 X2 X3 newvar 
1 A E B A:B:E 
2 B <NA> C B:C 
3 C D <NA> C:D 
4 <NA> A C A:C 
5 <NA> C A A:C 

Обратите внимание, что отдельные буквы в алфавитном порядке, так что я не получаю "A:C" и "C:A" в последних двух строках.

Я попытался

within(df, newvar <- factor(X1:X2:X3)) 

который дает

X1 X2 X3 newvar 
1 A E B A:E:B 
2 B <NA> C <NA> 
3 C D <NA> <NA> 
4 <NA> A C <NA> 
5 <NA> C A <NA> 

но присутствие отменяет ВПЛ агрегации.

+0

Попробуйте «вставить» в качестве альтернативы – Metrics

ответ

3

Попробуйте это ..

df$newvar <- apply(df,1, function(x) paste(sort(na.omit(x)) , collapse = ":")) 
# X1 X2 X3 newvar 
#1 A E B A:B:E 
#2 B <NA> C B:C 
#3 C D <NA> C:D 
#4 <NA> A C A:C 
#5 <NA> C A A:C 

apply Мы функцию, по каждой строке вашего data.frame, который удаляет значения NA, сортирует оставшиеся значения и пастами их вместе с ":" в качестве разделителя, assiging их в новый столбец newvar в вашем data.frame.

Смежные вопросы