簡體   English   中英

如何使用 R 根據 dataframe 中各個列中的最小值對特定列中的行進行子集化

[英]how to subset rows in specific columns based on minimum values in individual columns in a dataframe using R

我們有一個包含 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))

在 dataframe 'df1' 中,我們希望分別根據第 5 列和第 6 列中的最小值在 1:4 列中按 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 多個變量。

在此處輸入圖像描述

預期的 output 如下圖所示

在此處輸入圖像描述

為了獲得所需的 output 我嘗試了如下所示的代碼

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]
    })
)

上面的代碼有問題。 我正在尋找代碼來獲得所需的 output

我們可以使用map循環按“ID”分組的“X0”、“V2”列,為該循環列切片值為min的行,將它們綁定在一起( _dfr )並創建“d”列這些列的pmin

library(dplyr)
library(purrr)
nm1 <- names(df1)[5:6]
map_dfr(nm1, ~ df1 %>%
         group_by(ID) %>%
         slice_min(!! rlang::sym(.x))) %>% 
     ungroup %>%
     mutate(d = select(., all_of(nm1)) %>% reduce(pmin))

-輸出

# A tibble: 4 x 7
#      X     Y ID       TI    X0    V2     d
#  <dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl>
#1  8.47  48.0 B_1    191. 0.134 0.348 0.134
#2  7.59  48.7 B_1_2 1350. 0.361 0.771 0.361
#3  8.15  48.4 B_1    191. 0.846 0.141 0.141
#4  8.06  48.2 B_1_2 1350. 0.983 0.224 0.224
 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM