【问题标题】:In R, how to drop only a certain percentage of rows that meet certain conditions?在 R 中,如何只删除满足特定条件的特定百分比的行?
【发布时间】:2022-08-18 00:02:17
【问题描述】:

我有一个包含 40% 女性和 60% 男性的数据集。我还有一个工作角色专栏,其中 85% 是管理。我想随机删除行,直到我达到最多 50% 的男性和 50% 的工作角色管理。

我可以找到几种解决方案来解决如何删除满足这些条件的所有行,但没有什么能让我指定只删除一定数量或百分比的行。

任何人都可以建议可以实现这一目标的代码吗?

  • 共享您的代码和数据,以便其他人可以提供帮助
  • 您可以通过使用 sample 函数来执行此操作,例如 sample(df[df$gender == \"M\", numrows) 其中 numrows 是您要保留的行数,例如你的例子中女性观察的数量。

标签: r


【解决方案1】:

从一些假数据开始:

set.seed(42)
df1 <- data.frame(gender = sample(c("M", "F"), 1000, replace = TRUE, c(0.4, 0.6)),
                  role = sample(c("mgmt", "other"), 1000, replace = TRUE, c(0.85, 0.15)))

prop.table(table(df1))

#      role
#gender  mgmt other
#     F 0.529 0.094
#     M 0.324 0.053

我们可以查看现有的比例,然后使用我们想要的与我们拥有的比例进行采样:

library(dplyr)
props <- df1 %>%
  count(gender, role) %>%
  mutate(share = n / sum(n),
         desired = 0.25,
         weighting = desired/share)

df2 <- df1 %>%
  left_join(props) %>%
  slice_sample(n = 100, weight_by = weighting) %>%
  select(gender, role)

prop.table(table(df2))


      role
gender mgmt other
     F 0.23  0.22
     M 0.31  0.24

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    相关资源
    最近更新 更多