假设我有一个包含 3 列的 R 数据框 一个 , 乙 和 C , 哪里一个 值(value)观并不都是不同的。
我如何获得 A 的所有值,即 B 最小的 C 值(对于 A 的那个值)?
类似于伪 SQL 代码:SELECT C WHERE B = MIN(B) GROUPBY A
?
我看过aggregate()
功能,但我不确定它是否可以完成。aggregate(B ~ A, data = mydataframe, min)
只给我每个 A 的 B 的最小值,但是我不知道如何获得相应的 C 值。
有没有一种方法可以使用此聚合的结果对数据帧进行子集化以获得 C 值,和/或是否可以仅通过一次调用 aggregate()
来完成? ?
谢谢
我想得到的一个例子:
输入:
A B C
1 0 1
1 2 2
1 1 3
1 1 4
2 1 1
2 2 2
2 0 3
2 3 4
输出:
1
3
1 是对应于 A = 1 时 B (0) 最小值的 C 值
3 是对应于 A = 2 时 B (0) 的最小值的 C 值
最佳答案
您可以使用 data.table
包裹:
library(data.table)
DT <- as.data.table(mydataframe)
DT[ , C[which.min(B)], by = "A"]
# A V1
# 1: 1 1
# 2: 2 3
或
dplyr
:library(dplyr)
mydataframe %.%
group_by(A) %.%
summarise(res = C[which.min(B)])
# A res
# 1 2 3
# 2 1 1
或者基函数
by
:by(mydataframe, mydataframe$A, function(x) x$C[which.min(x$B)])
# mydataframe$A: 1
# [1] 1
# -------------------------------------------------------------------------------
# mydataframe$A: 2
# [1] 3
关于R - 根据第 3 列的统计信息,将 1 列的数据聚合到另一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21880590/