这是一个简化的示例。我有一个包含两个变量的数据帧,如下所示:
a <- c(1,1,1,2,2,2,3,3,6,7,4,5,5,8)
b <- c(5,10,4,2,8,4,6,9,12,3,7,4,1,7)
D <- data.frame(a,b)
正如您所看到的,a
有8个值,但它们已经复制,我的数据框架有14个观测值。我想创建一个有8个观测值的数据帧,其中a
的量是唯一的,b
的值是选择的最小值,即结果应该是:
a b
1 1 4
2 2 2
3 3 6
4 6 12
5 7 3
6 4 7
7 5 1
8 8 7
以下是如何使用基本R:
#both lines do the same thing, pick one
aggregate(D$b, by = D["a"], FUN = min)
aggregate(b ~ a, data = D, FUN = min)
以下是如何使用数据。表:
library(data.table)
setDT(D)
D[ , .(min(b)), by=a]
以下是如何使用tidyverse函数:
library(tidyverse) #or just library(dplyr)
D %>% group_by(a)
%>% summarize(min(b))
使用R基方法:
> D2 <- D[order(D$a, D$b ), ]
> D2 <- D2[ !duplicated(D2$a), ]
> D2
a b
3 1 4
4 2 2
7 3 6
11 4 7
13 5 1
9 6 12
10 7 3
14 8 7
base R
选项将是
aggregate(b ~ a, D, min)
library (dplyr)
D<-D %>% group_by(a) %>% summarize(min(b))