将因子与NA结合起来

时间:2013-09-19 23:01:57

标签: r

我有一个字符矩阵,有很多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>

但是NAs的存在会覆盖聚合。

1 个答案:

答案 0 :(得分: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的{​​{1}}行中的data.frame功能会删除NA值,对剩余值进行排序并将其与":"粘贴在一起作为分隔符,并将它们分配给新列newvar中的data.frame