我有一组非常复杂的函数,我需要将它们应用于四个不同的虚拟变量,它们的核心名称相同,但末尾的编号不同。我希望一次性应用这些功能,而不是重复四次。
作为示例,下面是一个仅为说明目的而组成的数据集:
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)
就我需要遍历的功能而言,关于这些变量,主要是三个。我需要能够首先对数据框进行子集设置,为每个原始变量创建一个新变量,然后将新结果写入数据框。请不要问我为什么需要执行这些操作,它们是更大的代码的一部分。
这些是我需要执行的步骤,但全部需要执行以下四个步骤:
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并仍然获得a(a1- a4)在new_df中。
答案 0 :(得分:0)
您可以使用8
,然后使用get()
,开始循环并更新工作变量。例如:
assign()