【问题标题】:Append dataframe to end of each dataframe in a list of dataframes in r将数据帧附加到 r 中数据帧列表中每个数据帧的末尾
【发布时间】:2020-02-26 17:56:24
【问题描述】:

我想在数据框列表中的每个数据框末尾添加一行。在此示例中,我想将列名作为新行添加到由group_split 创建的数据框列表中每个数据框的底部。

library(dplyr)

col_names1 <- as.data.frame(t(as.data.frame(colnames(iris))))
colnames(col_names1) <- unlist(col_names1[1, ])
rownames(col_names1) <-""

iris %>%
  group_split(Species) %>%
  bind_rows(col_names1) #errors out: Error: Column `Sepal.Length` can't be converted from numeric to factor

我想最终得到一个数据框列表,每个数据框的列名作为列表中每个数据框底部的新行。

【问题讨论】:

  • “将列名添加为新行” 会将您的所有数据更改为 character,因此不再有数字。这就是你想要的吗?
  • 你是对的,它会的,但没关系。
  • 也许您想要数据的表示,而不是数据的存储方式?例如,显示data.table::as.data.table(x) 通常会显示数据下方的列名以及超过 20 行时数据上方的列名。
  • @r2evans 实际上这是用于输出到作为报告的 excel 文件中,因此不适用于 R 中的任何分析 - 因此列类型并不重要,也与演示无关。话虽如此,我不知道as.data.table()会显示这样的数据,太好了!

标签: r dplyr


【解决方案1】:

一个问题是类型差异。我们可以转换为相同的类型,然后执行bind_rows。此外,当我们拆分为data.frame 的list 时,我们需要遍历list (map) 并应用bind_rows)

library(dplyr)
library(purrr)
iris %>% 
    group_split(Species) %>%
    map(~ bind_rows(.x %>%
                           mutate_all(factor), col_names1))
#[[1]]
# A tibble: 51 x 5
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# * <fct>        <fct>       <fct>        <fct>       <fct>  
# 1 5.1          3.5         1.4          0.2         setosa 
# 2 4.9          3           1.4          0.2         setosa 
# 3 4.7          3.2         1.3          0.2         setosa 
# 4 4.6          3.1         1.5          0.2         setosa 
# 5 5            3.6         1.4          0.2         setosa 
# 6 5.4          3.9         1.7          0.4         setosa 
# 7 4.6          3.4         1.4          0.3         setosa 
# 8 5            3.4         1.5          0.2         setosa 
# 9 4.4          2.9         1.4          0.2         setosa 
#10 4.9          3.1         1.5          0.1         setosa 
# … with 41 more rows

#[[2]]
# A tibble: 51 x 5
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species   
# * <fct>        <fct>       <fct>        <fct>       <fct>     
#...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-27
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 2017-06-26
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多