我有一个包含一列名称的数据集。如果存在具有较高值的行,我想删除具有较小“P”值的行。例如,在下面的数据集中,我想删除行 ID 的 3 和 5,因为存在“Texas P5”和“North Dakota P9”。做这个的最好方式是什么?提前致谢!
最佳答案
这是一个基本的 R 方式。使用 ave
将数据按 Name
不包括数字进行拆分,并检查哪个组元素等于其最大元素。 ave
返回与其输入属于同一类的向量,在本例中为字符。因此强制对原始数据框进行逻辑和子集处理。
x<-"
ID Name Score
1 'Minnesota P2' 342
2 'Vermont P7' 342
3 'Texas P4' 65
4 'New Mexico' 643
5 'North Dakota P8' 78
6 'North Dakota P9' 245
7 'Texas P5' 856
8 'Minnesota LP' 342"
df1 <- read.table(textConnection(x), header = TRUE)
i <- with(df1, ave(Name, sub("\\d+", "", Name), FUN = \(x){
x == tail(sort(x), 1)
}))
df1[as.logical(i),]
#> ID Name Score
#> 1 1 Minnesota P2 342
#> 2 2 Vermont P7 342
#> 4 4 New Mexico 643
#> 6 6 North Dakota P9 245
#> 7 7 Texas P5 856
#> 8 8 Minnesota LP 342
由 reprex package 创建于 2022-07-06 (v2.0.1)
关于r - 如何删除 R 中具有几乎相同列值的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72885831/