【问题标题】:How to create variables within dataframe in for loop?如何在 for 循环中的数据框中创建变量?
【发布时间】:2012-10-30 22:14:22
【问题描述】:

我有一个名为 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 命令也不适用于将变量名称分配给当前数据。

最好的方法是什么?

【问题讨论】:

    标签: r variables for-loop


    【解决方案1】:

    我认为您是来自另一个统计数据包的难民(stata 可能是SAS)。您不能使用assign 来分配使用$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)
    

    不需要循环!

    【讨论】:

    • 不可能,太棒了!谢谢! (PS。是的,来自 Stata 的难民 ;-) 我每天都越来越爱 R)
    • @user1780218 如果这能解决你的问题,你应该给答案打勾!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    相关资源
    最近更新 更多