R - 跨列创建行方式唯一值的连续列

时间:2016-08-14 00:27:44

标签: r

我的数据如下:

df <- data.frame(id=1:8,
f1 = c("A","B","B","C","C","C","A","A"),
f2 = c("A",NA,"B",NA,"B","A","B","A"),
f3 = c("A",NA,NA,NA,NA,"A","C","C"))

我想要创建的是一个包含每行中存在的唯一值的列(不包括NA)。所以结果将是“f_values”列:

  id f1   f2   f3 f_values
1  1  A    A    A        A
2  2  B <NA> <NA>        B
3  3  B    B <NA>        B
4  4  C <NA> <NA>        C
5  5  C    B <NA>       CB
6  6  C    A    A       CA
7  7  A    B    C      ABC
8  8  A    A    C       AC

row1是A b / c只出现A. row6是CA,因为C和A看起来是唯一的。我将该函数描述为行方式唯一的粘贴。我知道有可能将一些比较运算符和粘贴语句链接在一起,但真实数据有更多列,所以我希望有人知道更简单的方法。

2 个答案:

答案 0 :(得分:1)

鉴于上面的df

f_values<- sapply(apply(df[,-1],1, unique),function(x) paste(na.omit(x),collapse = ""))
df_new<-cbind(df,f_values)

df_new将是您问题中提出的理想结果。

答案 1 :(得分:1)

我们也可以通过使用&#39; id&#39;进行分组,在data.table中执行此操作。

library(data.table)
setDT(df)[, f_values := paste(na.omit(unique(unlist(.SD))), collapse="") , id]