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

时间:2020-11-12 16:42:23

标签: r dataframe row

我有一个带有命名列的数据集。列的名称也位于变量中。我希望能够选择满足“ col”列上条件的所有行。

在这里,我要选择“ col”列中的值与条件“ <2”相匹配的所有行。

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

我尝试在子集中使用“ eval”,或者在dplyr软件包中使用“选择”功能,但是它没有达到我想要的功能(或者我滥用了它)。

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

2 个答案:

答案 0 :(得分:1)

如果您是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是一个返回以下内容的函数TRUE(如果传入的值小于2)。

答案 1 :(得分:0)

请参见下文。

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())