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>

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

4

1 回答 1

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 值,对剩余的值进行排序并将它们粘贴在一起":"作为分隔符,将它们分配给newvar你的新列data.frame

于 2013-09-19T23:16:40.400 回答