【问题标题】:Split a dataframe into smaller dataframes in R using dplyr使用 dplyr 在 R 中将数据帧拆分为较小的数据帧
【发布时间】:2021-10-10 22:06:43
【问题描述】:

我有一个dataframe118 观察结果,总共有三列。现在,我想将此数据框拆分为twodataframes,每个都有59 观察。我尝试了两种不同的方法,但都没有返回我想要的结果。

如何在R 中使用dplyr 执行此操作?

示例数据框:

Code Count_2020 Count_2021
A    1          2
B    2          4
C    3          6
D    4          8
E    5          10
F    6          12

期望的输出:

DF1

Code Count_2020 Count_2021
    A    1          2
    B    2          4
    C    3          6

DF2

Code Count_2020 Count_2021
    D    4          8
    E    5          10
    F    6          12

第一种方法

基于此answer

library(tidyverse)
df= df %>% group_split(Code)

现在这会返回118 的列表,因此它是118 观察的列表,其中每个list 都有3 列。

第二种方法

基于此answer

library(tidyverse)
df= df %>% sample_n(size = 59) %>% 
  split(f = as.factor(.$Code))

现在这会返回59 的列表。

【问题讨论】:

  • 您尝试使用的逻辑是什么?你有 118 个不同的代码,所以当你除以它时,你会得到 118 个数据帧……你期望的是什么?你的代码只知道你给它的逻辑,所以如果你想把代码集中在一起,或者你想拆分成一定数量的行或每个行的总行数的一定比例,你必须把它放在你的代码中
  • 我明白了,这就是我改用第二种方法的原因
  • 那么您是否想找到一种方法来做到这一点,而无需对每组的行数进行硬编码?

标签: r dplyr


【解决方案1】:

我们可以使用glgroup_split中创建分组列

library(dplyr)
df1 %>%
      group_split(grp = as.integer(gl(n(), 59, n())), .keep = FALSE)

【讨论】:

    【解决方案2】:

    我们可以使用slice

    library(dplyr)
    
    DF1 <- DF %>% 
        slice(1:3)
    
    DF2 <- DF %>% 
        slice(4:6)
    

    输出:

    > DF1
      Code Count_2020 Count_2021
    1    A          1          2
    2    B          2          4
    3    C          3          6
    > DF2
      Code Count_2020 Count_2021
    1    D          4          8
    2    E          5         10
    3    F          6         12
    

    【讨论】:

      【解决方案3】:

      这是一个使用split的选项-

      n <- 3
      split(df, ceiling(seq(nrow(df))/n))
      
      #$`1`
      #  Code Count_2020 Count_2021
      #1    A          1          2
      #2    B          2          4
      #3    C          3          6
      
      #$`2`
      #  Code Count_2020 Count_2021
      #4    D          4          8
      #5    E          5         10
      #6    F          6         12
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-06
        • 1970-01-01
        • 2020-12-14
        • 1970-01-01
        • 2021-11-08
        • 1970-01-01
        • 2013-11-16
        相关资源
        最近更新 更多