【问题标题】:operate through nested lists in r通过 r 中的嵌套列表进行操作
【发布时间】:2020-10-06 18:19:11
【问题描述】:

我有一个嵌套列表,代码如下:

cat <- c("A","A","B","B")
prod <- c("prod1","prod2","prod3","prod4")
families <- as.data.frame(cat, prod)
categories <- with(families,split(as.character(prod), cat))
sales <- list()
for(a in prod){
  sales[[a]] <- runif(4)
}
sales <-  lapply(categories, function(x) sales[x])

我希望获得每种产品在其类别中的销售额比例。

proportion_product1 <- sum(sales$A$prod1)/(sum(sales$A$prod1)+sum(sales$A$prod2))

【问题讨论】:

    标签: r list nested


    【解决方案1】:

    用函数试试这个方法:

    #Function
    myfun <- function(x)
    {
      #Values
      y <- lapply(x,sum)
      z <- do.call(sum,y)
      #Compute
      a <- lapply(y,function(x) x/z)
      return(a)
    }
    #Apply
    lapply(sales,myfun)
    

    输出:

    $A
    $A$prod1
    [1] 0.6444069
    
    $A$prod2
    [1] 0.3555931
    
    
    $B
    $B$prod3
    [1] 0.4644624
    
    $B$prod4
    [1] 0.5355376
    

    【讨论】:

    • 感谢@Duck 我希望取消嵌套列表,这样我就可以拥有一个包含最终产品的列表。类似于 do.call(c,sale) 但它不起作用
    • 试试这个do.call(rbind,lapply(sales,myfun)),然后转换为数据框并使用任何重塑策略!
    • 它不起作用,我希望有一个列表,其中包含每个产品的计算重量,没有类别。 list$prod1, .., list$prodN
    • @lucas 试试这个:unlist(lapply(sales,myfun))
    • 它不返回一个命名列表,而是一个数字向量。我将它转换为一个数据框,它为我的目的工作:
    猜你喜欢
    • 1970-01-01
    • 2019-11-28
    • 2019-12-25
    • 1970-01-01
    • 2023-03-10
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    相关资源
    最近更新 更多