【问题标题】:How can I multiply multiple dataframes of a list by each observation of a vector?如何将列表的多个数据帧乘以向量的每个观察值?
【发布时间】:2020-05-31 05:31:20
【问题描述】:

我有一个数据框列表,我想为向量的每个元素相乘。

列表中的第一个数据框将乘以向量的第一个观察值,依此类推,生成另一个已经相乘的数据框列表。

我尝试使用循环来执行此操作,但没有成功。我也尝试使用 map 或 lapply 想象一些东西,但我做不到。

for(i in vec){
  for(j in listdf){
     listdf2 <- i*listdf[[j]]
    }
}

Error in listdf[[j]] : invalid subscript type 'list'

知道如何解决这个问题吗?

*Vector 和数据帧列表的长度相同。

【问题讨论】:

    标签: r for-loop


    【解决方案1】:

    使用Map

    listdf2 <- Map(`*`, listdf, vec)
    

    purrr 中,这可以使用map2 来完成:

    listdf2 <- purrr::map2(listdf, vec, `*`)
    

    如果您对for 循环解决方案感兴趣,您只需要一个循环:

    listdf2 <- vector('list', length(listdf))
    for (i in seq_along(vec)) {
       listdf2[[i]] <- listdf[[i]] * vec[i]
    }
    

    数据

    vec <- c(4, 3, 5)
    df <- data.frame(a = 1:5, b = 3:7)
    listdf <- list(df, df, df)
    

    【讨论】:

    • 我尝试了Map 但没有成功,因为:Error in FUN (left, right): non-numeric argument to binary operator 也许是因为数据帧有一些 NA 或 NULL 数据? purrr::map2 和循环解决方案生成一个带有“NULL 数据帧”的列表
    • @jpoa 它适用于我在帖子中使用的数据,您可以使用这些数据测试答案是否有效。确保您拥有类似可重复方式的数据,以便我们可以测试解决方案。阅读有关how to ask a good question 的信息以及如何提供reproducible example
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2021-01-11
    • 1970-01-01
    相关资源
    最近更新 更多