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

4
我有一个名为mydata的R数据框,其中包含某个年龄和身高范围内的人数计数。在数据框中,我有变量mydata$ageto10(<= 10岁的人数),mydata$ageto20(<= 20岁的人数)等,分别对应35、42和65岁的年龄。身高也是一样(还有其他几个变量)。
我想创建新的变量,用于引用年龄范围10到25、25到35、35到42和42到65岁之间人数的计数。因此,对于第一个情况,我希望执行以下操作:
mydata$age10to25 <- mydata$ageto25 - mydata$ageto10

这个方法可行,但我希望能够在所有范围内执行此操作,并对高度和其他变量执行相同的操作。肯定有比手动复制粘贴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=""))
  }
}

但是显然这样做不起作用(即使我手动填写k,似乎assign命令也不适用于将变量名分配给当前数据。

最好的方法是什么?

1个回答

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)

不需要循环!

太棒了,谢谢!(附:没错,我是从Stata转过来的难民;-) 我越来越喜欢R了) - user1780218
如果这解决了你的问题,你应该给答案打个勾! - seancarmody

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接