【发布时间】:2021-03-28 09:49:29
【问题描述】:
我们有一个包含 1000 行多列的数据框。示例数据框如下所示
df1 <- data.frame(X = c(7.48, 7.82, 8.15, 8.47, 8.80, 9.20, 9.51, 9.83, 10.13, 10.59, 7.59, 8.06, 8.39, 8.87, 9.26, 9.64, 10.09, 10.48, 10.88, 11.45),
Y = c(49.16, 48.78, 48.40, 48.03, 47.65, 47.24, 46.87, 46.51, 46.15, 45.73, 48.70, 48.18, 47.72, 47.20, 46.71, 46.23, 45.72, 45.24, 44.77, 44.23),
ID = c("B_1", "B_1", "B_1", "B_1", "B_1", "B_1", "B_1", "B_1", "B_1", "B_1", "B_1_2", "B_1_2", "B_1_2", "B_1_2", "B_1_2", "B_1_2", "B_1_2", "B_1_2", "B_1_2", "B_1_2"),
TI = c(191.31, 191.35, 191.39, 191.44, 191.48, 191.52, 191.56, 191.60, 191.64, 191.69, 1349.93, 1349.97, 1350.01, 1350.05, 1350.09, 1350.14, 1350.18, 1350.22, 1350.26, 1350.30),
X0 = c(0.172, 0.344,0.846,1.335,1.838,2.410,2.89,3.37,3.842,4.46,0.361,0.983,1.545,2.241,2.86,3.47,4.15,4.77,5.388,6.164),
V2 = c(1.154,0.644,0.141,0.348,0.851,1.423,1.9059,2.3875,2.856,3.475,0.771,0.224,0.596,1.262,1.883,2.493,3.168,3.786,4.402,5.177))
在数据框“df1”中,我们希望分别根据第 5 列和第 6 列中的最小值按 ID 对列中的行进行子集化。
例如,在数据框“df1”中,“X0”列中的 ID“B_1”,0.172 是最小值,0.140 是相同 ID 的“V2”列中的最小值。所以我们想从 1:4 列中提取第 1 行和第 3 行以及它们对应的 df1 数据帧的 X0th 和 V2th 值,如下图所示。对于 ID“B_1_2”也是如此。像变量“X0”、“V2”变量,我们的数据集中有 20 多个变量。
预期输出如下图所示
为了获得所需的输出,我尝试了如下所示的代码
library(data.table)
df1=as.data.table(df1)
a <- do.call(rbind,
apply(df1,1,function(i){
df1[df1[,.I[(X0)==min(X0)],by=ID]$V1]
})
)
上面的代码有问题。 我正在寻找代码以获得所需的输出
【问题讨论】:
-
您的代码到底有什么问题?
-
@akrun d 变量只不过是每列相对于行的最小值
-
我没听懂你最后的评论
标签: r dataframe data-manipulation