【问题标题】:Replace variable name in loop in R在R中的循环中替换变量名
【发布时间】:2018-05-12 13:07:49
【问题描述】:

有没有办法在循环中自动执行以下操作?而不是全部手写:

hour_1 <- aggregate(hour_1$freq, by=list(country=hour_1$country), FUN=sum)

hour_2 <- aggregate(hour_2$freq, by=list(country=hour_2$country), FUN=sum) 

hour_3 <- aggregate(hour_3$freq, by=list(country=hour_3$country), FUN=sum) 


hour_4 <- aggregate(hour_4$freq, by=list(country=hour_4$country), FUN=sum) 

hour_5 <- aggregate(hour_5$freq, by=list(country=hour_5$country), FUN=sum) 

hour_6 <- aggregate(hour_6$freq, by=list(country=hour_6$country), FUN=sum) 

hour_7 <- aggregate(hour_7$freq, by=list(country=hour_7$country), FUN=sum) 

hour_8 <- aggregate(hour_8$freq, by=list(country=hour_8$country), FUN=sum) 

hour_9 <- aggregate(hour_9$freq, by=list(country=hour_9$country), FUN=sum) 

hour_10 <- aggregate(hour_10$freq, by=list(country=hour_10$country), 
FUN=sum) 

我想要一个自动计算小时数的 for 循环。

谢谢:)

【问题讨论】:

  • 请提供一些可重现的代码并更好地解释您要完成的工作
  • 我会考虑使用get() 函数。你可以有一个 for 循环遍历对象名称的向量 c('hour_1','hour_2',...,'hour_n'),我相信 tmp &lt;- get('hour_1')tmp$freq, tmp$country 等会实现你想要的。
  • 首先将hour_1:n 放入一个包含必要列的大数据集中。 rbind(hour_1, hour_2, hour_n),并为“小时”添加一列。然后你可以在大片场上做一次aggregate(freq ~ country + hour, hours, sum)。保留单独的数据集并使用get() 等是一场等待发生的噩梦。
  • 我想要一百万美元。
  • 抱歉我的问题不清楚,我是新来在stackoverflow上发帖的。感谢您的反馈,我会尝试建议的代码并让您知道。

标签: r loops variables


【解决方案1】:

是的,但最好的方法是使用列表和 lapplysapply 函数而不是循环。

hour.in <- mget( paste0('hour_', 1:10) )
hour.out <- lapply( hour.in, function(x) aggregate(x$freq, 
    by=list(country=x$country), FUN=sum) )
names(hour.out) <- paste0('hour_', 1:10)

现在所有结果都在hour.out 中,可以单独访问,也可以使用lapplysapply 进一步处理。

【讨论】:

  • 我不知道mget()。这很有用!
  • 稍微扩展一下,把它全部放在一个数据集中可能会很好:hour.in &lt;- Map(cbind, hour.in, hour=seq_along(hour.in)); hours &lt;- do.call(rbind, L); aggregate(freq ~ country + hour, hours, sum)
  • 谢谢你的回答,我会试试你的代码并告诉你。
猜你喜欢
  • 2015-03-22
  • 2021-08-01
  • 2012-08-28
  • 2015-08-10
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多