我看了几篇文章,但在R中找不到解决这个问题的明确解释:
df如下所示:
df>
one two three
1 EC1 EC1 EC2
2 EC2 EC2 EC3
3 EC1 EC1 EC1
我想要一个新列,其中包含每行中的唯一值,如下所示。 注意四会有不同的长度
one two three four
1 EC1 EC1 EC2 EC1 EC2
2 EC2 EC2 EC3 EC2 EC3
3 EC1 EC1 EC1 EC1
从阅读线程看,似乎需要lapply公式。我还想第一个阶段是将所有行值粘贴到新列中的单个值中作为第一步。
答案 0 :(得分:2)
我们可以apply
与MARGIN = 1
一起使用循环行,将unique
元素和paste
元素放在一起。
df$four <- apply(df, 1, FUN = function(x) paste(unique(x), collapse=" "))
我们也可以regex
使用paste
来执行此操作
trimws(gsub("(\\b\\S+\\b)(?=.*\\1)", "", do.call(paste, df), perl = TRUE))
#[1] "EC1 EC2" "EC2 EC3" "EC1"