我的数据如下:
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看起来是唯一的。我将该函数描述为行方式唯一的粘贴。我知道有可能将一些比较运算符和粘贴语句链接在一起,但真实数据有更多列,所以我希望有人知道更简单的方法。
答案 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]