【发布时间】:2014-09-14 04:59:27
【问题描述】:
我有一个下面给出的数据框 (B),其中包含各种 id (x_1) 的一些重复条目。对于 x_1 中的每个 id,我有兴趣在第二列 (z_1) 中提取具有最小值(以及它们的重复)的行。例如,对于A1,我想提取第 5 行和第 6 行。我还想在z_1 列下保留不超过 1 个值的行——例如,除 A1 之外的所有其他条目并且 B10 应该包含在输出中。
x_1 <- c("A1", "A1", "A1", "A1", "A1", "A1", "B10", "B10", "B10","B10", "B500", "B500", "C100", "C100", "C100", "D40", "D40", "G100", "G100")
z_1 <- c(rep(1.87, 2), rep(1.56, 2), rep(1.15, 2), rep(1.60, 2), rep(1.44, 2), rep(1.34, 2), rep(1.50, 3), rep(1.90, 2), rep(1.59, 2))
z_2 <- c( c(0.5, 1, 0.5, 1, 0.5, 1), c(0.2, 0.4, 0.2, 0.4), c(0.3, 0.6), c(0.6, 1.2, 1.8), c(0.25, 0.5), c(0.15, 0.3))
这是数据框:
B <- data.frame(x_1, z_1, z_2)
x_1 z_1 z_2
A1 1.87 0.50
A1 1.87 1.00
A1 1.56 0.50
A1 1.56 1.00
A1 1.15 0.50
A1 1.15 1.00
B10 1.60 0.20
B10 1.60 0.40
B10 1.44 0.20
B10 1.44 0.40
B500 1.34 0.30
B500 1.34 0.60
C100 1.50 0.60
C100 1.50 1.20
C100 1.50 1.80
D40 1.90 0.25
D40 1.90 0.50
G100 1.59 0.15
G100 1.59 0.30
这是我想要得到的结果:
y_1 d_1 d_2
A1 1.15 0.50
A1 1.15 1.00
B10 1.44 0.20
B10 1.44 0.40
B500 1.34 0.30
B500 1.34 0.60
C100 1.50 0.60
C100 1.50 1.20
C100 1.50 1.80
D40 1.90 0.25
D40 1.90 0.50
G100 1.59 0.15
G100 1.59 0.30
只是补充一点,我已经尝试了一些从其他类似发布的问题中发现的东西,但这些都没有提供所需的输出:
aggregate(grouped_B$x_1, by = list(grouped_B$z_1), min)
do.call("rbind", by(B, B$x_1, function(x) x[which.min(unique(x$z_1)), ]))
还只是补充一点,我正在处理的数据框是一个分组数据:
grouped_B <- groupedData(z_1 ~ z_2 | x_1,
data = B, FUN = mean,
labels = list( x = "duration",
y = "height"), units = list("(years)"))
我非常感谢任何有用的提示/代码。
【问题讨论】: