如何在R

时间:2018-07-23 16:49:49

标签: r dataframe

这是一个简化的示例。 我有一个带有两个这样的变量的数据框:

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

4 个答案:

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