【问题标题】:Split Dataframe into list of one-row Dataframes将数据框拆分为单行数据框列表
【发布时间】:2020-02-14 20:36:44
【问题描述】:

我想拆分一个数据框

df <- data.frame(a = 1:4, b = letters[1:4])

  a b
1 1 a
2 2 b
3 3 c
4 4 d

进入单行数据框列表

list(
    data.frame(a = 1, b = letters[1])
    , data.frame(a = 2, b = letters[2])
    , data.frame(a = 3, b = letters[3])
    , data.frame(a = 4, b = letters[4])
)

[[1]]
  a b
1 1 a

[[2]]
  a b
1 2 b

[[3]]
  a b
1 3 c

[[4]]
  a b
1 4 d

有没有优雅的解决方案?

【问题讨论】:

  • 或许unname(split(df, 1:nrow(df)))
  • @markus 你能回答一下吗?我真的很喜欢。

标签: r


【解决方案1】:

使用dplyr

df %>%
 rowid_to_column() %>%
 group_split(rowid, keep = FALSE) 

[[1]]
# A tibble: 1 x 2
      a b    
  <int> <fct>
1     1 a    

[[2]]
# A tibble: 1 x 2
      a b    
  <int> <fct>
1     2 b    

[[3]]
# A tibble: 1 x 2
      a b    
  <int> <fct>
1     3 c    

[[4]]
# A tibble: 1 x 2
      a b    
  <int> <fct>
1     4 d    

或者:

df %>%
 mutate(rowid = 1:n()) %>%
 group_split(rowid, keep = FALSE) 

或缩短版(由@arg0naut91 提供):

group_split(df, row_number(), keep = FALSE)

【讨论】:

    【解决方案2】:

    一种简单的方法是使用 R 内置的 split() 命令

    split( df, 1:length( df$a ) )
    

    它应该足够健壮以处理df$a 中的重复项。

    【讨论】:

    • 在这方面它很强大。 split(df, 1:nrow(df)) 会更好一点
    【解决方案3】:

    应该是asplit

    lapply(asplit(df, 1), as.data.frame.list)
    #[[1]]
    #  a b
    #1 1 a
    
    #[[2]]
    #  a b
    #1 2 b
    
    #[[3]]
    #  a b
    #1 3 c
    
    #[[4]]
    #  a b
    #1 4 d
    

    pmap

    library(purrr)
    pmap(df, tibble)
    #[[1]]
    # A tibble: 1 x 2
    #      a b    
    #  <int> <fct>
    #1     1 a    
    
    #[[2]]
    # A tibble: 1 x 2
    #      a b    
    #  <int> <fct>
    #1     2 b    
    
    #[[3]]
    # A tibble: 1 x 2
    #      a b    
    #  <int> <fct>
    #1     3 c    
    
    #[[4]]
    # A tibble: 1 x 2
    #      a b    
    #  <int> <fct>
    #1     4 d    
    

    【讨论】:

    • 为什么是asplit 而不是split(df, df$a)
    猜你喜欢
    • 1970-01-01
    • 2022-12-22
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 2021-03-12
    • 2015-11-14
    • 2020-07-14
    相关资源
    最近更新 更多