删除字符串中的重复项

标签 r

我有以下数据集

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/

相关文章:

R 数学运算 NA 值

R:按名称寻址多列数据框

r - 将新数据点分配给内核 k-means 中的簇(R 中的 kernlab 包)?

r - 删除特定列

r - 如何在 R 中迭代向量并替换值

r - R的httr包中curl中-d参数的等价

R:使用现有数据的参数生成季节性 ARIMA 时间序列模型

r - 在 R 中粘贴矩阵

r - 如何合并 R 中同一数据框中的行(基于特定列下的重复值)?

r - data.table 中圆括号前的点,.()