我创建了一个数据框,我试图使用下面列出的一些标准来获取子集。简单来说,我想编写一个函数来选择4岁以下所有男性ID的一半。我需要这个函数随后为我做其他事情因此需要编写函数。
我试图编写一个简单的代码,如下所示,但似乎错误回来 - 我真的很感激一些帮助。我认为这个错误来自filter()
任务,但我不知道为什么。
library(dplyr)
set.seed(2016)
longData <- data.frame(patient=rep(paste(letters[1:20], sep = "_", 1:20), each=5),
age=rep(runif(20, 1, 10), each = 5),var=runif(100, 50, 1000),
time=rep(1:5, 20), gender = factor(rep(c("male", "female"), c(60, 40))))
ptNo <- function(data, id = "patient")
{
ptNumber <- data %>% filter(!duplicated(data[id])) %>% nrow()
return(ptNumber)
}
randSubsetFun <- function(df, gender, seedNumb){
data <- filter(df, gender, age < 4)
set.seed(seedNumb)
n <- round(ptNo(data)/2)
fd <- sample_n(data, n)
return(fd)
}
randSubsetFun(df = longData, gender = "male", seedNumb = 1)
错误内容如下:
Warning message:
In Ops.factor(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, :
‘&’ not meaningful for factors
令人讨厌的是,当我尝试在函数之外单独运行这些代码时,它工作正常。它只是在函数内不起作用。 任何帮助将受到热烈的赞赏。关于如何改进此代码的任何建议也会受到欢迎。我想这个问题真的是我如何通过这个函数从过滤函数中调用一个因子(如果有意义的话)?