【发布时间】:2019-02-21 09:46:26
【问题描述】:
我有一组非常复杂的函数,我需要将它们应用于四个不同的虚拟变量,它们具有相同的核心名称但最后的数字不同。我希望一次性应用这些功能,而不是重复四次。
作为一个例子,这里是一个虚构的数据集,仅用于说明目的:
n <- c(1:100)
var1 <-NA
var1[n < 20] <- 1
var1[n >50] <- 0
var2 <-NA
var2[n < 30] <- 1
var2[n >50] <- 0
var3 <-NA
var3[n < 10] <- 1
var3[n >40] <- 0
var4 <-NA
var4[n < 20] <- 1
var4[n > 450] <- 0
df <- data.frame(var1, var2, var3, var4, n)
就我需要循环的函数而言,这些变量主要是三个。我需要能够首先对数据框进行子集化,为每个原始变量创建一个新变量,然后将新结果写入数据框。请不要问我为什么需要这样做,它们是更大代码的一部分。
这些是我需要执行的步骤,但全部是 4 个:
df_sub <- subset(df, !is.na(df$var1))
sample1 <- nrow(df_sub[df_sub$var1 == 1,])
if(sample1 < 35) {
a1 <- NA
} else {
a1 <- mean(df_sub$n[df_sub$var1==1])
new_df <- data.frame(a1,a2,a3,a4)
我正在考虑遍历后缀,但我无法弄清楚 R 是如何处理这个问题的。我找到了通过assign() (https://stats.stackexchange.com/questions/10838/produce-a-list-of-variable-name-in-a-for-loop-then-assign-values-to-them) 在循环中创建变量的解决方案
但我仍然无法弄清楚如何处理子集。更一般地说,我将如何遍历变量名中的数字而不是列号、列表等。
或者,如果有一种方法可以创建一个函数,我可以在其中创建变量以导出到该函数之外的环境中,然后将该函数应用于 df 中的 var1 - var4 并仍然获得 4 个不同版本的 a (a1 - a4) 在 new_df 中。
【问题讨论】: