【发布时间】:2014-03-17 16:49:34
【问题描述】:
我正在尝试对许多按顺序标记的变量应用一系列简单的函数,并将这些新创建的变量绑定到同一个数据框。我设法完成了第一部分(主要是在先前答案的帮助下),但没有完成第二部分。
dat <- data.frame(x1=sample(c(0:1)), av1 = sample(10) , av2 = sample(10) , av3 = sample(10),av4=sample(10))
dat$t1<-ifelse(dat$x1==1,dat$av1*2/7,dat$av1*5/7)
dat$t2<-ifelse(dat$x1==1,dat$av2*2/7,dat$av2*5/7)
dat$t3<-ifelse(dat$x1==1,dat$av3*2/7,dat$av3*5/7)
dat$t4<-ifelse(dat$x1==1,dat$av4*2/7,dat$av4*5/7)
dat
基本上,我想在 av1,av2,av3.. 的所有值上重复这些 ifelse 语句,以创建标记为 tu1、tu2、tu3 的相应变量,而无需每次都重新键入函数。例如:
dat <- cbind(dat, sapply(dat[grep("av", names(dat))], function(col) { ifelse(dat$x1==0, col*2/7, col*5/7) } ) )
但是,现在所有新变量也都标记为 av。我想我可以在之后更改列的名称,例如:
names( dat)[10:13] <- gsub("av", "tu", names(dat)[10:13])
因为我一直在我的代码中预先添加/删除变量,所以这些列号一直在变化。有没有办法让我同时创建、附加和重新标记新变量?或者有没有更好的方法将相同的函数应用于顺序标记的变量?
【问题讨论】:
-
您可以在执行
sapply后立即使用duplicated(colnames(dat))使用gsub重命名这些列,而不是列出列号