【问题标题】:Generate new column in list assigning different values by data frame from an array with lapply (R)在列表中生成新列,通过数据框从具有 lapply (R) 的数组中分配不同的值
【发布时间】:2014-11-25 08:19:15
【问题描述】:

我有一个包含 3 个数据框的列表 (lst),每个数据框都包含列 (GDP) 和一个数组 (国家 >) 带有 3 个国家(ARG、IT、US)的名称,如下所示:

lst <- list(data.frame(GDP=101:104), data.frame(GDP=1001:1003), data.frame(GDP=500:505));

countries <- array(c("ARG", "IT", "US"));

我想创建一个名为 country 的新变量以合并到列表中,以便数组 (ARG, IT, US) 中的值“匹配”到列表中的每个数据框。

到目前为止,我遵循的 3 个步骤是:

  1. 重命名 lst 中包含的数据框:

名称(lst)

  1. 使用 lapply 循环并分配国家名称的函数:

国家变量

  1. 使用 lapply 循环生成函数 countryvar

lst

我的方法肯定行不通,因为新变量 country 由 NA 填充,如运行以下命令时所示:

str(lst);

我想我可能没有正确索引数组中包含的值?

谁能提供一种有效的方法来解决这个问题(最好使用 lapply)?

【问题讨论】:

  • 你在做类似setNames(lst, countries)的事情吗?如果您显示了预期的结果,这将有所帮助
  • @Richard Scriven,您使用 Map 的解决方案非常完美!非常感谢!
  • @akrun 我很抱歉!我对stackoverflow还很陌生,我什至没有看到你的答案。非常感谢您的帮助和让我知道!

标签: arrays r list lapply


【解决方案1】:

不清楚你想要什么结果。像其中之一?

Map(cbind, lst, country = countries)
[[1]]
  GDP country
1 101     ARG
2 102     ARG
3 103     ARG
4 104     ARG

[[2]]
   GDP country
1 1001      IT
2 1002      IT
3 1003      IT

[[3]]
  GDP country
1 500      US
2 501      US
3 502      US
4 503      US
5 504      US
6 505      US

或者

setNames(lst, countries)

或者两者兼而有之

setNames(Map(cbind, lst, country = countries), countries)

【讨论】:

    【解决方案2】:
     setNames(Map(`cbind`, lst, country=countries), countries)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-07
      • 1970-01-01
      • 2022-01-02
      • 2018-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多