我有一个带有命名列的数据集。列的名称也位于变量中。我希望能够选择满足“ col”列上条件的所有行。
在这里,我要选择“ col”列中的值与条件“ <2”相匹配的所有行。
name = "col"
dataset = data.frame(col = 1:3)
我尝试在子集中使用“ eval”,或者在dplyr软件包中使用“选择”功能,但是它没有达到我想要的功能(或者我滥用了它)。
有没有简单的方法可以做到这一点?
答案 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)
根据是否满足条件给出了TRUE
,FALSE
的向量。
然后将此布尔向量作为索引传递给df
,将产生条件为TRUE
的所有行。
有关%in%
的更多详细信息,请参见help(is.element())