将重复名称的元素列表转换为r中的data.frame

mgdq6dx1  于 2023-03-27  发布在  其他
关注(0)|答案(5)|浏览(115)

我有一个元素的列表,这些元素有重复的名字

l <- list(name = c("lol", "kek", "pip"),
          values = c(1,2,3),
          name = c("raph", "mike", "leo"),
          values = c(4,2,1))

如何以最简单的方式将其转换为这样的 Dataframe ?

data.frame(name = c("lol", "kek", "pip", "raph", "mike", "leo"),
           values = c(1,2,3,4,2,1))

  name values
1  lol      1
2  kek      2
3  pip      3
4 raph      4
5 mike      2
6  leo      1
5sxhfpxr

5sxhfpxr1#

在Base R中,你可以:

unstack(stack(l))
  name values
1  lol      1
2  kek      2
3  pip      3
4 raph      4
5 mike      2
6  leo      1

要维护基础数据类型,请用途:

type.convert(unstack(stack(l)), as.is =TRUE)
  name values
1  lol      1
2  kek      2
3  pip      3
4 raph      4
5 mike      2
6  leo      1
rbl8hiat

rbl8hiat2#

split由重复的names(),和unlist各自创建的list s组:

data.frame(lapply(split(l, names(l)), unlist))
#  name values
#1  lol      1
#2  kek      2
#3  pip      3
#4 raph      4
#5 mike      2
#6  leo      1
ewm0tg9j

ewm0tg9j3#

该解决方案迭代l的唯一名称,并使用unlist()将每个名称的所有元素组合成单个向量。然后将结果列表转换为 Dataframe 。

names(l) |>
  unique() |>
  setNames(nm = _) |>
  lapply(\(nm) unlist(l[names(l) == nm])) |>
  as.data.frame()
name values
1  lol      1
2  kek      2
3  pip      3
4 raph      4
5 mike      2
6  leo      1
sxpgvts3

sxpgvts34#

尝试使用stacksplit

data.frame(with(stack(l), split(values, ind)))

#    name     values
# 1  lol      1
# 2  kek      2
# 3  pip      3
# 4  raph     4
# 5  mike     2
# 6  leo      1
jckbn6z7

jckbn6z75#

您可以检查重复和非重复的名称:

dups <- duplicated(names(l))
rbind(
  data.frame(l[!dups]),
  data.frame(l[dups])
)
name values
1  lol      1
2  kek      2
3  pip      3
4 raph      4
5 mike      2
6  leo      1

相关问题