簡體   English   中英

在R中的多個列中應用矢量化子集

[英]Applying vectorized subsetting across multiple columns in R

我試圖找到一種直接的方法來矢量化/概括data.frame的子集化。 我們假設我有一個data.frame:

df <- data.frame(A = 1:5, B = 10 * 1:5, C = 100 * 1:5)

每列都有自己的條件,目標是df的子集,因此只有那些行保留在至少一列滿足條件的位置。 我現在想要找到一個概括的向量化子集機制

df <- subset(df, df[,1]<2 | df[,2]< 30 | df[,3]<100)

所以我可以像這樣制定它

crit <- c(2,30,100)
df <- subset(df, df$header < crit[1:3])

在我想去的路上。

df <- subset(df, df$header < crit[1:n])

我知道一個多步循環解決方法,但必須有另一種方法。 我很感激任何幫助。

鑒於:

x <- c(1:5)
y <- c(10,20,30,40,50)
z <- c(100,200,300,400,500)

# df is a base function
mydf <- data.frame(A = x, B = y, C = z)

crit <- c(2,30,100)

然后,這將讓您看到列中的哪些值小於臨界值:

> sweep(mydf, 2, crit, "<")
         A     B     C
[1,]  TRUE  TRUE FALSE
[2,] FALSE  TRUE FALSE
[3,] FALSE FALSE FALSE
[4,] FALSE FALSE FALSE
[5,] FALSE FALSE FALSE

這將為您提供符合任何條件的行:

> subset(mydf, rowSums(sweep(mydf, 2, crit, "<")) > 0)

  A  B   C
1 1 10 100
2 2 20 200

這也應該有效

> df[apply(df, 1, function(x){any(x < crit)}), ]
  A  B   C
1 1 10 100
2 2 20 200

暫無
暫無

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

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