簡體   English   中英

R:基於多列中的值選擇行

[英]R: Selecting Rows based on values in multiple columns

我有一個數據框,其中有許多列,它們的公用前綴為“ _B”,例如“ _B1”,“ _ B2”,...“ _ Bn”。 這樣我就可以通過以下方式獲取列名:

allB <- c(grep( "_B" , names( my.df ),value = TRUE ) )

我希望選擇每個_B *列都通過一個條件的行,例如值> = some_cutoff

有人可以告訴我該怎么做嗎,我對“ all()”和“ any()”的嘗試失敗了

set.seed(12345)     
my.df <- data.frame(a = round(rnorm(10,5),1), m_b1= round(rnorm(10,4),1),m_b2=round(rnorm(10,4),1))
allB <- c(grep( "_b" , names( my.df ),value = TRUE ) )
> my.df
     a m_b1 m_b2
1  5.6  3.9  4.8
2  5.7  5.8  5.5
3  4.9  4.4  3.4
4  4.5  4.5  2.4
5  5.6  3.2  2.4
6  3.2  4.8  5.8
7  5.6  3.1  3.5
8  4.7  3.7  4.6
9  4.7  5.1  4.6
10 4.1  4.3  3.8

我希望選擇每個m_b1和m_b2列均大於等於4.0的行

我們可以使用filter_atdplyr ,並指定all_vars (如果該行中的所有值都滿足條件。如果它是該行中的任何值, any_vars

library(dplyr)
my.df %>%
   filter_at(allB, all_vars(. >= some_cutoff))

數據

some_cutoff <- 3
my.df <- structure(list(`_B1` = c(1, 1, 9, 4, 10), `_B2` = c(2, 3, 12, 
 6, 12), V3 = c(3, 6, 13, 10, 13), V4 = c(4, 5, 16, 13, 18)), .Names = c("_B1", 
 "_B2", "V3", "V4"), row.names = c(NA, -5L), class = "data.frame")

allB <- grep( "_B" , names( my.df ),value = TRUE ) 

在基數R

some_cutoff = 4
selectedCols <- my.df[grep("_b", names(my.df), fixed = T)]
selectedRows <- selectedCols[apply(selectedCols, 1, 
                                   function(x) all(x>=some_cutoff)), ]

selectedRows
#   m_b1 m_b2
# 2  5.8  5.5
# 6  4.8  5.8
# 9  5.1  4.6

grep()用於獲取具有感興趣模式的列的索引,然后將其用作my.df子集。 當第二個參數MARGIN = 1時, apply()遍歷行。 如果all()條目與條件匹配,則匿名函數返回TRUE 然后,此邏輯向量用於子集selectedCols

暫無
暫無

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

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