删除 R 中每个字符串的重复值 [重复]

问题描述 投票:0回答:2

我有一个包含两列的数据框:

 VAR1.                     VAR2.

  A.              102 million; 102 million

  B.      0.1 million; 2 million; 0.1 million; 2 million

我想删除 VAR2 的重复值。对于每一行,获得

 VAR1.           VAR2.

  A.          102 million

  B.     0.1 million; 2 million

我该怎么办?

谢谢你的建议

r duplicates
2个回答
2
投票

使用基数 R,我们可以将 ";"paste unique 条目上的字符串拆分为 VAR2

sapply(strsplit(df$VAR2, ";"), function(x) paste(unique(x), collapse = ";"))
#[1] "102 million"           "0.1 million;2 million"

使用 dplyrtidyr 我们可以使用 separate_rowsVAR2 带入不同的行,然后 paste 每组只有 unique 个条目。

library(dplyr)
library(tidyr)

df %>%
 separate_rows(VAR2, sep = ";") %>%
 group_by(VAR1) %>%
 summarise(VAR2 = paste(unique(VAR2), collapse = ";"))

#  VAR1  VAR2                 
#  <fct> <chr>                
#1 A     102 million          
#2 B     0.1 million;2 million

1
投票

这是一个使用 sub 的解决方案,它似乎有效:

x <- "0.1 million; 2 million; 0.1 million; 2 million"
gsub("\\b(\\d+(?:\\.\\d+)?) ([^;]+); (?=.*\\b\\1 \\2\\b)", "", x, perl=TRUE)

[1] "0.1 million; 2 million"

这里使用的一般策略是匹配一个数字,带有一个可选的小数部分,后跟另一个词,前提是这个数字词项在输入字符串的下游至少出现一次。如果它确实再次出现,那么我们通过用空字符串替换来删除第一个术语。请注意,一对术语的最后一次出现不会被删除,因为积极的前瞻会失败。

© www.soinside.com 2019 - 2024. All rights reserved.