示例数据:
col1 col2
<NA> cc
a a
ab a
z a
我想用这些值添加一列 unique
-- col1 和 col2 之间不共享的任何值。
col1 col2 unique
<NA> cc cc
a a
ab a b
z a za
我尝试使用 setdiff
但是
(用于复制目的:)
df <- read.table(header=TRUE, stringsAsFactors = FALSE, text =
"col1 col2
NA cc
a a
ab a
z a
")
像这样:
df$unique <- paste0(setdiff(df$col1, df$col2), setdiff(df$col2, df$col1))
但它返回
Error in `$<-.data.frame`(`*tmp*`, "unique", value = c("<NA>cc", "abcc" :
replacement has 2 rows, data has 3
从错误来看,它似乎正在生成列之间差异的向量,而不是元素之间的差异...
编辑:在最后一行添加了 z
和 a
示例数据。
最佳答案
您可以在 base R 中使用 setdiff
和 Reduce
来做到这一点:
cols <- c(1,2)
df$unique <- unlist(lapply(apply(df[cols], 1, function(x)
Reduce(setdiff, strsplit(na.omit(x), split = ""))), paste0, collapse=""))
# col1 col2 unique
# 1 <NA> cc cc
# 2 a a
# 3 ab a b
关于r - 其他两列之间的唯一值列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43808173/