【问题标题】:Add list of dataframes (of length n) to dataframe with n rows, R [duplicate]将数据帧列表(长度为n)添加到具有n行的数据帧,R [重复]
【发布时间】:2021-09-19 18:10:24
【问题描述】:

这是一个基本的问题,但我被困住了: 代码取自这里:https://www.geeksforgeeks.org/list-of-dataframes-in-r/

我有这个长度为 2 的数据帧列表。

# Create dataframe
df1 = data.frame(
  y1 = c(1, 2, 3),
  y2 = c(4, 5, 6)
)

# Create another dataframe
df2 = data.frame(
  y1 = c(7, 8, 9),
  y2 = c(1, 4, 6)
)

# Create list of data frame using list()
listOfDataframe = list(df1, df2)

现在我希望这个列表成为data.frame 中的一列。由于我的列表长度为 2,我认为数据框应该有两行,因为我希望每个数据框基本上都在一行上。 所以我尝试以下方法:

df_list_col = data.frame(a = 1:2, listOfDataframe)

但我收到以下错误:

Error in data.frame(a = 1:2, listOfDataframe) : 
  arguments imply differing number of rows: 2, 3

我在这里错过了什么?

【问题讨论】:

  • 将列表包裹在I:d = data.frame(I(listOfDataframe)); str(d)
  • 非常感谢!!这也有效,我只是不明白为什么这是必要的
  • 如果您只执行data.frame(listOfDataframe)然后您会看到 data.frame 有 3 行 4 列,您尝试做的是添加带有 2 行的“a”。列表长度在这里并不重要,重要的是列表中 data.frames 的行数。

标签: r list dataframe


【解决方案1】:

分两步分解-

df <- data.frame(a = seq_along(listOfDataframe))
df$b <- listOfDataframe

df
#  a                b
#1 1 1, 2, 3, 4, 5, 6
#2 2 7, 8, 9, 1, 4, 6

df$b
#[[1]]
#  y1 y2
#1  1  4
#2  2  5
#3  3  6

#[[2]]
#  y1 y2
#1  7  1
#2  8  4
#3  9  6

使用tibble 直接工作 -

tibble::tibble(a = seq_along(listOfDataframe), b = listOfDataframe)

# A tibble: 2 x 2
#     a b           
#  <int> <list>      
#1     1 <df [3 × 2]>
#2     2 <df [3 × 2]>

【讨论】:

  • 非常感谢!你知道为什么会这样吗?
  • 我认为链接帖子中接受的答案解释了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 2020-09-11
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多