[英]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_at
的dplyr
,並指定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.