【问题标题】:subset dataset into 2 smaller ones将数据集子集分成 2 个较小的数据集
【发布时间】:2022-07-20 23:33:23
【问题描述】:

我如何根据 Numeric_variable 包含 2 个用于某些单位(例如 A)和 3 个用于某些其他单位(例如 B)的事实来子集以下数据集?

Unit | Numeric_variable
A    | 1
A    | 1
A    | 2
A    | 2
A    | 2
A    | 2
B    | 1
B    | 1
B    | 3
B    | 3
B    | 3
B    | 3

进入:

df1:

Unit | Numeric_variable
A    | 1
A    | 1
A    | 2
A    | 2
A    | 2
A    | 2

df2:

Unit | Numeric_variable
B    | 1
B    | 1
B    | 3
B    | 3
B    | 3
B    | 3

通过df1 <- df[which(df$Numeric_variable != 3),],我得到了以下不是我想要得到的。我想得到上面的df1。

Unit | Numeric_variable
A    | 1
A    | 1
A    | 2
A    | 2
A    | 2
A    | 2
B    | 1
B    | 1

【问题讨论】:

  • 使用split(df, df$Unit)
  • 谢谢@akrun,不幸的是它不起作用,因为它创建了一个列表,我的数据集中有很多单位和其他变量。我需要使用 Numeric_variable 的值,但我不明白为什么 which 命令没有像我想象的那样工作。
  • 不建议在全局环境中创建多个对象。但是如果你坚持使用list,你可以使用list2env来创建对象,即lst1 <- split(df, df$Unit); list2env(lst1, .GlobalEnv)

标签: r conditional-statements subset


【解决方案1】:

我们可以这样做:

group_split 在这种情况下非常方便:

library(dplyr)
group_df <- df %>% 
  group_split(Unit)

group_df[[1]]
group_df[[2]]
> group_df <- df %>% 
+   group_split(Unit)
> group_df[[1]]
# A tibble: 6 x 2
  Unit  Numeric_variable
  <chr>            <int>
1 A                    1
2 A                    1
3 A                    2
4 A                    2
5 A                    2
6 A                    2
> group_df[[2]]
# A tibble: 6 x 2
  Unit  Numeric_variable
  <chr>            <int>
1 B                    1
2 B                    1
3 B                    3
4 B                    3
5 B                    3
6 B                    3

【讨论】:

    猜你喜欢
    • 2014-02-21
    • 2019-07-28
    • 1970-01-01
    • 2018-04-19
    • 2022-12-13
    • 1970-01-01
    • 2021-03-28
    • 2022-12-07
    • 1970-01-01
    相关资源
    最近更新 更多