如何在R中的两个复制量之间进行选择



这是一个简化的示例。我有一个包含两个变量的数据帧,如下所示:

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))

最新更新