好吧,我是stackoverflow和r的新手。这可能是一个相当愚蠢的问题,但我找不到解决方案。
包
library(tidyverse)
下面是代码
sample_size_finder <- function(variable, value){
df %>%
select(variable) %>%
filter(variable == value) %>%
count()
}
- df =先前导入的数据帧
- variable =我想要从中选择和筛选的列的名称
- value =我想为过滤的那一列中的值
我希望函数查找由参数"变量">指定的数据帧中的列,选择它,并从中过滤所有等于参数值的观测值。. 然后,count()所有这些观察值。
当我试图运行函数
时sample_size_finder("team_size", 4)
返回
n
1 0
为零,因此输出错误。
在内部运行代码,而不使用相同的参数包装函数
df %>%
select(team_size) %>%
filter(team_size == 4) %>%
count()
返回n
1 12
,这是正确的输出(12个观察值,team_size等于4)。
我将问题缩小到sample_size_finder(变量,值)函数中的变量参数。以下是我目前所做的尝试:
- 将函数改为只有"value";作为论据。这给出了期望的输出,但我想要有变量"参数包括
- 将函数更改为只有"变量";作为论据。返回"0";作为输出
- 运行该函数,但没有添加"变量";在字符串引号中。返回"0";作为输出
我几乎准备放弃,只使用没有函数的代码,但不知何故,这让我很困扰。如果有好心人能帮助我,我将不胜感激:)
祝你一切顺利。马提亚使用.data
访问列名称的变量名称功能。
library(dplyr)
sample_size_finder <- function(variable, value){
df %>%
select(.data[[variable]]) %>%
filter(.data[[variable]] == value) %>%
count()
}
sample_size_finder("team_size", 4)
以R为基底可以写成-
sample_size_finder <- function(variable, value){
sum(df[[variable]] == value)
}
我们可以将across
与all_of
结合使用
library(dplyr)
sample_size_finder <- function(variable, value){
df %>%
select(all_of(variable)) %>%
filter(across(all_of(variable), ~ . == value)) %>%
count()
}
sample_size_finder("team_size", 4)