我有以下数据集
df <- data.frame(
path = c("a,b,a",
"(direct) / (none), (direct) / (none), google / cpc, google / cpc",
"f,d",
"a,c"
)
)
并且我希望删除重复的内容,以便我的输出为
path
1: a, b
2: (direct) / (none), google / cpc
3: f, d
4: a, c
我尝试了这个,但它不适用于第二行
setDT(df)
df$path <- sapply(strsplit(as.character(df$path ), split=","), function(x) {
paste(unique(x), collapse = ', ')
})
最佳答案
你就快到了。唯一的问题是您需要使用 ",\\s*"
进行分割,而不仅仅是 ","
。在后一种情况下,调用 unique
将不会产生所需的输出,因为某些字符串的空格数量可能有所不同。如果您在拆分时删除它们,则可以解决此问题。
另一方面,由于您使用了 setDT(df)
,我猜您正在使用 data.table
。如果是这样,您需要使用正确的 data.table
语法来避免复制:
df[,path:=sapply(
strsplit(as.character(df$path ), split=",\\s*"),
function(x) {paste(unique(x), collapse = ', ')})]
将通过引用修改path
列。
关于删除字符串中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40912474/