连接没有重复的数据帧r

时间:2017-03-15 18:05:46

标签: r dataframe duplicates concatenation

我有一个数据框,我想连接某些列。

我的问题是这些列中的文字可能包含也可能不包含重复信息。我想删除重复项,以便仅保留相关信息。

例如,如果我有一个数据框,例如:

  Animal1         Animal2        Label  
1 cat dog         dolphin        19
2 dog cat         cat            72
3 pilchard 26     koala          26
4 newt bat 81     bat            81

您可以看到在第2行中,'cat'包含在'Animal1'和'Animal2'列中。在第3行中,数字26位于“Animal1”和“Label”列中。而在第4行中,“Animal2”和“标签”列中的信息已按顺序包含在“Animal1”中。

因此,通过使用粘贴功能,我可以连接列......

data1 <- paste(data$Animal1, data$Animal2, data$Label, sep = " ")

但是,我还没有设法删除重复项。我得到的输出当然只是来自我的连接:

  Output1
1 cat dog dolphin 19
2 dog cat cat 72
3 pilchard 26 koala 26
4 newt bat 81 bat 81

第1行很好,但其他行包含重复项,如上所述。

我想要的输出是:

  Output1
1 cat dog dolphin 19
2 dog cat 72
3 pilchard koala 26
4 newt bat 81

连接后我尝试删除重复项。我知道在字符串中你可以做类似下面的例子(例如Removing duplicate words in a string in R)。

d <- unlist(strsplit(data1, split=" "))
paste(d[-which(duplicated(d))], collapse = ' ')

当我刚刚使用字符串时,这确实对我有用,但我无法将它应用于整个列,因为我收到了一个错误的“意外符号”,指的是方括号。

我已经看到还有unique()函数,例如Remove Duplicated String in a RowDeleting reversed duplicates with R

reduce_row = function(i) {
  split = strsplit(i, split=", ")[[1]]
  paste(unique(split), collapse = ", ") 
}
data1$v2 = apply(data1, 1, reduce_row)

我尝试使用这些示例,但尚未成功。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

完成data1 <- paste(data$Animal1, data$Animal2, data$Label, sep = " ")之后:

data.frame(Output1 = vapply(strsplit(data1, " +"), function(x) paste(unique(x), collapse = " "), character(1)))
#              Output1
# 1 cat dog dolphin 19
# 2         dog cat 72
# 3  pilchard 26 koala
# 4        newt bat 81