首页 > 解决方案 > 是否有一个 R 函数可以按 n 个列表中的元素创建嵌套列表?

问题描述

我正在重新格式化数据集 ,my_data以输入到另一个需要非常特定格式的程序中。我很难获得所需的适当嵌套列表,特别是usagedata元素。本质上,usagedata是一个包含两个变量var和的列表time,每个变量都有五个观察值。相反,我需要usagedata列出 4 个观察结果,每个观察结果都带有vartime作为元素。

示例数据框如下。

my_data <- data.frame(
  Id.1 = as.character(c("A", "B", "C")),
  Id.2 = as.character(c("D", "E", "F")),
  Var.1 = as.numeric(c(100,150,200)),
  Time.1 = as.character(c("Jan","Jan","Jan")),
  Var.2 = as.numeric(c(75,125,175)),
  Time.2 = as.character(c("Feb", "Feb", "Feb")),
  Var.3 = as.numeric(c(80,120,140)),
  Time.3 = as.character(c("Mar", "Mar", "Mar")),
  Var.4 = as.numeric(c(80,120,140)),
  Time.4 = as.character(c("Apr", "Apr", "Apr")),
  )

然后,我创建df.1以将 Var 和 Time 列表作为单个元素逐行保存。

df.1 <- my_data %>%
  transmute(
    var = transpose(as.list((select(., starts_with("Var"))))),
    time = transpose(as.list((select(., starts_with("Time")))))
  )

inputdata <- my_data %>%
  transmute(
    Name = Id.1,
    Unit = Id.2,
    usagedata = df.1 
  )

inputdata <- split(inputdata, seq(nrow(inputdata)))

然而,最终结果是该元素是一个包含和usagedata的单个元素的列表,每个元素都有 4 个观察值。我想要的是一个包含 4 个元素的列表,每个包含一个元素。我不知道如何去格式化这个。任何帮助表示赞赏。vartimeusagedatavartime

最终输出应遵循此层次结构。

inputdata           list [3]
  [[1]]             list [3]
    Name            character
    Unit            character
    usagedata       list [4]
      [[1]]         list [2]
        Var         double
        Time        character
      [[2]]         list [2]
        Var         double
        Time        character
etc...

标签: rlistnested-lists

解决方案


推荐阅读