【问题标题】:Converting a data frame into a list in R [duplicate]将数据框转换为R中的列表[重复]
【发布时间】:2016-07-24 22:08:25
【问题描述】:

我有一个看起来像这样的数据框“a”

a1  a2  a3
a   1   45
b   2   55
c   4   34
d   3   87

我需要把这个数据框转换成一个列表,看起来像这样

a   a2  1
a   a2  2
a   a2  4
a   a2  3
b   a3  45
b   a3  55
b   a3  34
b   a3  87

如何在 R 中做到这一点?

【问题讨论】:

  • 您的输出对我来说毫无意义 - 为什么第一列只有 abstack(a[-1]) 也许?
  • a 和 b 只是一个例子
  • @Doej 您显示的输出看起来不像list
  • 那它看起来怎么样?我以为是列表的形式

标签: r list matrix dataframe


【解决方案1】:

我们使用 Map 通过循环第二和第三列 rbindlist 元素和 rbindlist 创建一个包含元素“a”、“b”的新列,并使用 idcol 选项从listnames 创建“grp”列。

 library(data.table)
 setnames(rbindlist(Map(data.frame, df1[-1], 
       letters[1:2]), idcol='grp'), 2:3, c('v1', 'v2'))[]
#   grp v1 v2
#1:  a2  1  a
#2:  a2  2  a
#3:  a2  4  a
#4:  a2  3  a
#5:  a3 45  b
#6:  a3 55  b
#7:  a3 34  b
#8:  a3 87  b

数据

df1 <- read.table(text="a1  a2  a3
 a   1   45
 b   2   55
 c   4   34
 d   3   87", sep="", header=TRUE, stringsAsFactors=FALSE)

【讨论】:

  • 错误:找不到函数“setDT”
  • @Doej 你必须加载library(data.table)
  • @Doej 没错,如果你看我的帖子,我用它作为data.frame
  • @Doej 您可以使用相同的代码,除了使用 letters[1:5] 并在 setnames 中进行相应更改
  • @Doej 这是因为您使用的是letters[1:3]。而是使用df1$a1[1:3]setnames(rbindlist(Map(data.frame, df1[-1], df1[1:3,1]), idcol="grp"), 2:4, paste0("v", 1:3))[]
猜你喜欢
  • 1970-01-01
  • 2020-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 2015-04-16
相关资源
最近更新 更多