如何在for循环中的数据框架中创建变量?

use*_*218 4 variables for-loop r

我有一个R数据框mydata,用一定年龄和一定高度的人数来调用.所以数据帧我有变量mydata$ageto10(=人长达十几年的年龄数),mydata$ageto20(=人长达二十岁时数目),等等与年龄35,42和65也是一样高度(以及其他几个变量).

我想创造出指人的年龄范围内10to25的数量,年龄范围25to35,35to42和42to65的计数新的变量.所以对于第一种情况,我想做:

mydata$age10to25 <- mydata$ageto25 - mydata$ageto10
Run Code Online (Sandbox Code Playgroud)

这有效,但我希望在所有范围内执行此操作,并对高度和其他变量执行相同操作.必须有一种比复制粘贴40次并手动更改变量名更简单的方法!:)

我认为它应该是这样的:

for (i in c("age", "height"))
{
  for (k in c(10,20,35,42, 65))
  {
  assign(paste("mydata$", i, k, "to", <<next k here>>, sep=""), get(paste("mydata$", i, <<next k here>>, , sep="")) - get(paste("mydata$", i, k, , sep=""))
  }
}
Run Code Online (Sandbox Code Playgroud)

但显然,这并不工作(即使我在K手工填写的,似乎assign命令并不意味着当前的数据分配变量名.

最好的方法是什么?

mne*_*nel 6

我认为你是另一个统计包(stata也许或是SAS)的难民.你不能使用分配使用分配给列$paste.通常,如果您正在使用assign标准任务,那么您正在做一些非惯用的事情R,或者有更好的解决方案.

就像是

lower <- c(10,25,35,42)
upper <- c(25,35,42,65)

# create the differences
newData <-   myData[,paste0('ageto',upper)] - myData[, paste0('ageto',lower)]
# name them with valid names (not starting with numbers
names(newData) <- paste0('from',lower,'to',upper)
# add as columns to the original
myData <- cbind(myData, newData)
Run Code Online (Sandbox Code Playgroud)

不需要循环!