【问题标题】:How to transform a data frame into a list in r?如何将数据框转换为 r 中的列表?
【发布时间】:2021-02-07 22:05:33
【问题描述】:

你能帮帮我吗?

我想根据 R 数据框中包含的信息制作一个列表。找到了解决办法,但是不通用。

例如,让我们从这个数据框开始:

df <- data.frame(vertices = paste(letters[1:20]), modules = rep(1:4, 5))

我想用df$modules 把数据框变成一个列表。列表中的项目应包含来自df$vertices 的数据。所以我找到了这个解决方案:

list1 <- split(df, df$modules)

list2 <- vector(mode = "list", length = length(unique(df$modules)))
list2[[1]] <- as.vector(list1[[1]]$vertices)
list2[[2]] <- as.vector(list1[[2]]$vertices)
list2[[3]] <- as.vector(list1[[3]]$vertices)
list2[[4]] <- as.vector(list1[[4]]$vertices)

如您所见,它可以工作,但并不通用,因为您需要手动将这么多行添加到代码的末尾length(unique(df$modules))

我也尝试了一个while循环,但没有成功:

i <- 1

while (i == length(list2)) {
    list2[[i]] <- as.vector(list1[[i]]$vertices)
    list2
}

这个问题有通用的解决方案吗?谢谢!

【问题讨论】:

    标签: r arrays list dataframe loops


    【解决方案1】:

    你快到了:

    split(df$vertices, df$modules)
    

    【讨论】:

      【解决方案2】:
      > lapply(split(df, df$modules), "[", , 1)
      $`1`
      [1] "a" "e" "i" "m" "q"
      
      $`2`
      [1] "b" "f" "j" "n" "r"
      
      $`3`
      [1] "c" "g" "k" "o" "s"
      
      $`4`
      [1] "d" "h" "l" "p" "t"
      

      【讨论】:

      • 非常感谢!通话中是否缺少某些内容?
      • 我假设 R 在此行旁边向您显示警告,这样做只是为了提醒我们没有在“行”部分输入值,我们将其留空并从每个元素中选择第一列。所以你可以忽略这个警告。
      猜你喜欢
      • 1970-01-01
      • 2020-07-29
      • 2021-11-21
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 2015-04-16
      相关资源
      最近更新 更多