我有一个数据框,我想连接某些列。
我的问题是这些列中的文字可能包含也可能不包含重复信息。我想删除重复项,以便仅保留相关信息。
例如,如果我有一个数据框,例如:
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 Row,Deleting reversed duplicates with R
reduce_row = function(i) {
split = strsplit(i, split=", ")[[1]]
paste(unique(split), collapse = ", ")
}
data1$v2 = apply(data1, 1, reduce_row)
我尝试使用这些示例,但尚未成功。
非常感谢任何帮助。
答案 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