r - 其他两列之间的唯一值列

标签 r dataframe

示例数据:

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

从错误来看,它似乎正在生成列之间差异的向量,而不是元素之间的差异...

编辑:在最后一行添加了 za 示例数据。

最佳答案

您可以在 base R 中使用 setdiffReduce 来做到这一点:

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/

相关文章:

r - 将 x 轴文本更靠近 ggplot2 上的条形图条(覆盖背景面板)

R 如何在数据框中获取行的中位数

从标准输入读取字符

python - 如何在Python中将pandas数据框转换为矩阵格式?

r - 如何使用 dplyr 获取最后一行之前的最后 n 行的 cummean

r - 在 R 中用另一个矩阵索引一个矩阵 - 索引越界

r - 如何将渐变填充应用于 ggplot2 中的 geom_rect 对象?

python - 拆分系列并替换为 Pandas 中的 `\t`

python - pandas.DataFrame.merge 中的错误?

python - 如果为 True,则 Pandas 保留列值,否则为 False