R数据表一个字段没有聚合

时间:2017-05-02 09:18:59

标签: r

我已经使用data.table功能来找出" y" by" x"如下面的代码所示。

> x <- c("A", "B", "A", "C", "B", "A")
> y <- c(0, 1, 1, 1, 2, 2)
> z <- c(1, 2, 1, 4, 5, 3)
> df <- data.table(x, y, z)
> temp <- df[, .(M=min(y)), by="x"]
> temp
   x M
1: A 0
2: B 1
3: C 1
> df
   x y z
1: A 0 1
2: B 1 2
3: A 1 1
4: C 1 4
5: B 2 5
6: A 2 3

但是,现在找出最小值后,我希望能够得出相应的&#34; z&#34;对于每个&#34; x&#34; s。

简而言之,我希望温度如此:

> temp
   x M z
1: A 0 1
2: B 1 2
3: C 1 4

我如何在R?

中执行此操作

1 个答案:

答案 0 :(得分:1)

我们可以通过一个步骤使用.I来提取逻辑向量的行索引,并根据该行对数据集的行进行子集

df[df[, .I[y==min(y)], by = x]$V1]
#    x y z
#1: A 0 1
#2: B 1 2 
#3: C 1 4

或另一种选择是

df[order(x,y)][!duplicated(x)]

如果我们想根据'temp'获取输出,请使用连接

df[temp,  on =.(x, y=M)]
#   x y z
#1: A 0 1
#2: B 1 2
#3: C 1 4