我想循环遍历变量“Item”中的每个唯一值(即A,B,C),并且只保留每个项目的ID号最小的行,删除每个相应项目的其他行。
所以,我现在有一个如下所示的数据框:
Item Cost ID
A 4 1
A 3
B 39 10
B 18
B 21
C 290 15
C
我想要的东西看起来像这样:
Item Cost ID
A 4 1
B 39 10
C 290 15
我该怎么做?
(先谢谢 - 我是R的新手!)
答案 0 :(得分:1)
dplyr
您的任务非常简单,但有多种方法。
library(dplyr)
df %>% group_by(Item) %>% filter(ID == min(ID, na.rm = TRUE))
Source: local data frame [3 x 3]
Groups: Item [3]
Item Cost ID
<fctr> <dbl> <dbl>
1 A 4 1
2 B 39 10
3 C 290 15
使用的数据:
structure(list(Item = structure(c(1L, 1L, 2L, 2L, 2L, 3L, 3L), .Label = c("A",
"B", "C"), class = "factor"), Cost = c(4, NA, 39, NA, NA, 290,
NA), ID = c(1, 3, 10, 18, 21, 15, NA)), .Names = c("Item", "Cost",
"ID"), row.names = c(NA, -7L), class = "data.frame")