从名称在变量中的列中选择行

Selecting rows from a column which name is in a variable

我有一个包含命名列的数据集。列的名称也在变量中。我希望能够 select 满足列“col”上的条件的所有行。

这里我想 select 所有在“col”列中的值符合条件“< 2”的行。

name = "col"
dataset = data.frame(col = 1:3)

我尝试在子集中使用“eval”,或者 dplyr 包的“select”函数,但它没有达到我的要求(或者我误用了它)。

有没有简单的方法可以做到这一点?

请看下面

a <- 1:5
b <- 6:10
namevar <- "a"
df <- data.frame(a,b)
df[df[,namevar] %in% c(1:3),]
  a b
1 1 6
2 2 7
3 3 8

这里发生的事情是df[,namevar] %in% c(1:3)根据是否满足条件给出TRUEFALSE的向量

然后将此布尔向量作为索引传递给 df 会生成条件为 TRUE.

的所有行

有关 %in% 的更多详细信息,请参阅 help(is.element())

如果您是 R 的新手,我将推荐使用 tidyverse 软件包集,包括对此类问题非常有用的 dplyr,这样您就可以有更直接可读和可理解的代码。您可以使用 install.packages('tidyverse') 获取此包。安装后,回答您的问题:

library(dplyr)

df <- data.frame(
  col = c(0:10),
  another_col = c(10:20),
  third_col = c(25:35)
)

dynamic_name <- "col"

filter_at(df, dynamic_name, ~ .x < 2)

注意:tidyverse 系列包通常接受公式语法(即 ~ 表达式)作为引入匿名 (lambda) 函数的方式,因此 ~ .x < 2 是一个函数即 returns TRUE 如果传入的值小于 2).