我有一个带有命名列的数据集。列的名称也在一个变量中。我希望能够选择满足列"0"上的条件的所有行;col";。
在这里,我想选择其值在";col";列匹配条件"<2〃;。
name = "col"
dataset = data.frame(col = 1:3)
我试着用";eval";在子集中;选择";dplyr包的功能,但它并没有达到我想要的效果(或者我滥用了它(。
有简单的方法吗?
如果您是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
是一个在传入的值小于2时返回TRUE
的函数。
请参阅下文。
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())