【问题标题】:Apply function between lists of data frames在数据框列表之间应用函数
【发布时间】:2023-03-24 22:44:01
【问题描述】:

我在 R 中有 2 个列表(my.listAmy.listB),每个列表包括 3 个数据框:

da1 <- data.frame(x=c(1,2,3),y=c(4,5,6))
da2 <- data.frame(x=c(3,2,1),y=c(6,5,4))
da3 <- data.frame(x=c(5,4,1),y=c(8,5,7))
my.listA <- list(da1, da2, da3)

db1 <- data.frame(z=c(2))
db2 <- data.frame(z=c(3))
db3 <- data.frame(z=c(4))
my.listB <- list(db1, db2, db3)

我正在尝试获取一个新列表 (my.listAB),以便它包含 3 个数据框,显示 my.listA中数据框的逐个元素乘积> 和 my.listB 根据数据框名称末尾的数字配对,即 da1 中的元素与 db1 中的元素的乘积db2da2的乘积和db3da3的乘积。

这将是我想要的结果:

dab1 <- data.frame(x=c(2,4,6),y=c(8,10,12))
dab2 <- data.frame(x=c(9,6,3),y=c(18,15,12))
dab3 <- data.frame(x=c(20,16,4),y=c(32,20,28))
my.listAB <- list(dab1 , dab2 , dab3)    

我尝试了以下方法,但没有成功:

for (i in 1:3) {
  my.listAB <- my.listA[[i]]*my.listB[[i]]
};

理想情况下,有人可以使用 lapply 函数指导我找到解决方案吗?

非常感谢!

【问题讨论】:

  • lapply(1:3, function(x) my.listA[[x]] * my.listB[[x]]$z) 应该和l &lt;- list(); for (x in 1:3) l[[x]] &lt;- my.listA[[x]] * my.listB[[x]]$z 一样有效。
  • 非常感谢@lukeA 的帮助!您的代码简洁明了!
  • @lukeA,我不知道如何通过 Stackoverflow 投票按钮感谢您的帮助。有什么线索吗?
  • 不客气。我发布了一个答案,您可以查看是否喜欢该答案。

标签: r list function loops


【解决方案1】:

你可以使用

l <- lapply(1:3, function(x) my.listA[[x]] * my.listB[[x]]$z) 

l <- list() 
for (x in 1:3) 
  l[[x]] <- my.listA[[x]] * my.listB[[x]]$z

【讨论】:

    【解决方案2】:

    除了@lukeA在cmets中建议的lapplyfor循环选项,你也可以试试Map

     r1 <- Map(`*`, my.listA,unlist(my.listB))
     identical(r1, my.listAB)
     #[1] TRUE
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 2019-12-10
      • 1970-01-01
      • 2018-12-21
      • 2019-09-27
      相关资源
      最近更新 更多