【发布时间】:2017-08-06 15:29:48
【问题描述】:
我有一个数据框,我想在其中连接某些列。
我的问题是这些列中的文本可能包含也可能不包含重复信息。我想删除重复项以便仅保留相关信息。
例如,如果我有一个数据框,例如:
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”和“Label”列中的信息已按顺序包含在“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)
我尝试使用这些示例,但尚未成功。
非常感谢任何帮助。
【问题讨论】:
标签: r dataframe duplicates concatenation