r - R用户定义函数对多个变量进行分组
问题描述
我已将连续 3 年的调查数据合并到一个数据框中。事实证明,每次调查的变量名称都不同(例如,100 个变量有 3 次,而不是只有 100 个变量)。我正在尝试创建一个函数,允许我输入与同一问题相关的变量。然后该函数观察哪一个包含信息并返回一个新变量来替换原来的 3 个变量。
我试图创建下面的函数。使用 'coalesce' 选择观察并忽略所有 NA。
df <- matrix(c(3, NA, NA, NA, 0.2, NA, NA, NA, 0.5),
ncol = 3, nrow = 3,
dimnames = list(NULL, c("a", "b", "c")))
special_function <-function(df, Name_new_variable, Name_a, Name_b, Name_c, na.rm= FALSE) {
df$Name_new_variable <- coalesce(df$Name_a,
df$Name_b,
df$Name_c
)
df$Name_a <- NULL
df$Name_b <- NULL
df$Name_c <- NULL
}
期望上面的函数查看数据帧“df”。考虑新变量“name_new_variable”的名称并合并 3 列 Name_a、Name_b、Name_c。
解决方案
如果您正在使用调查,我建议您使用数据框而不是矩阵作为df
. 当您使用dplyr
库时,您可以尝试以下代码:
special_function <-function(df, Name_new_variable, Name_a, Name_b, Name_c) {
df <- as.data.frame(df) %>% select(Name_a, Name_b, Name_c)
df[, Name_new_variable]= coalesce(df[, Name_a], df[, Name_b], df[, Name_c])
df <- df %>% select(-c(Name_a, Name_b, Name_c))
return(df)
}
special_function(df, "NewVariableName", "a", "b", "c")
输出:
> special_function(df, "NewVariableName", "a", "b", "c")
NewVariableName
1 3.0
2 0.2
3 0.5
推荐阅读
- android - 访问 mObservables 时对 RecyclerView 适配器进行单元测试会引发 NullPointerException
- r - source():错误:替换的长度为零
- excel - 引用具有不同文件名的工作簿
- javascript - 将字符串变量传递给 TypeOrmModuleOptions 中的“类型”
- java - 使用 Java 将文本文件读入数组会产生异常
- xml - XSLT 转换时需要生成电子表格
- java - 使用 JavaMailSender 向多人发送个性化邮件
- ico - 如何通过 web3 js 提高我的 erc20 代币价格?
- ios - 线程 1:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) en scrollView.delegate = self
- visual-studio - Azure Devops - 互操作库