R语言 创建跨列的行式唯一值的串联列

xwbd5t1u  于 2023-06-19  发布在  其他
关注(0)|答案(2)|浏览(101)

我的数据看起来像这样:

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

行1是A B/c,只有A出现。ro 6是CA,因为C和A唯一出现。我会把这个函数描述为paste-wise unique。我知道可以将一些比较运算符和粘贴语句链接在一起,但真实的数据有更多的列,所以我希望有人知道更简单的方法。

j8ag8udp

j8ag8udp1#

给定上面的df

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

df_new将是您的问题中制定的期望结果。

bogh5gae

bogh5gae2#

我们也可以在data.table中通过使用'id'分组来实现这一点。

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

相关问题