繁体   English   中英

data.frame行列出命名元素

[英]data.frame rows to list named elements

我有一个2列的混合类型,矢量和数据框列表。

> my.list
$a
[1] 1

$df1
  key value
1   b     2
2   c     3

$df2
  key value
1   d     4
2   e     5

我想最后得到一个向量列表,每个数据帧行将成为一个列表元素,列值为value,列键为元素名称。

所以这个例子的结果是:

$a
[1] 1

$b
[1] 2

$c
[1] 3

$d
[1] 4

$e
[1] 5

其实这就是我如何做到这一点:

my.list <- list(a = 1, 
                df1 = data.frame(key = c("b", "c"), value = 2:3), 
                df2 = data.frame(key = c("d", "e"), value = 4:5))

unlist(lapply(seq_along(my.list), function(i) {
  if (is.data.frame(my.list[[i]])) {
    with(my.list[[i]], as.list(setNames(value, key), all.names = TRUE))
  } else {
    setNames(my.list[i], names(my.list[i]))
  }
}), recursive = FALSE)

但我真的不喜欢这个解决方案。 你有更聪明的想法吗? 谢谢

您可以分两步执行R

x = do.call(rbind, Filter(is.data.frame, my.list))

c(Filter(Negate(is.data.frame), my.list), as.list(setNames(x$value, x$key)))

$a
[1] 1

$b
[1] 2

$c
[1] 3

$d
[1] 4

$e
[1] 5

一个选项(基于示例)将melt (从reshape2 )到'long'格式,转换为data.tablesetDT ),用'L1'中的相应值替换'key'中的NA元素,并split '价值'基于'关键'。

library(data.table)
library(reshape2)
with(setDT(melt(my.list))[is.na(key), key := L1], split(value, key))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM