这是一个简化的示例。 我有一个带有两个这样的变量的数据框:
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
答案 0 :(得分:3)
以下是使用基数R的方法:
#both lines do the same thing, pick one
aggregate(D$b, by = D["a"], FUN = min)
aggregate(b ~ a, data = D, FUN = min)
这是使用data.table的方法:
library(data.table)
setDT(D)
D[ , .(min(b)), by=a]
以下是使用tidyverse函数的方法:
library(tidyverse) #or just library(dplyr)
D %>% group_by(a)
%>% summarize(min(b))
答案 1 :(得分:2)
使用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
答案 2 :(得分:1)
一个base R
选项将会
aggregate(b ~ a, D, min)
答案 3 :(得分:0)
library (dplyr)
D<-D %>% group_by(a) %>% summarize(min(b))