r - 选择一列中给定值的数据框的一半

标签 r select subset rows

我想选择其中一列中给定值的数据框的一半。换句话说,从下面给出的数据框中,我需要提取 Y 列中给定值的一半行:

DF:
 id1  column Y   value
9830     A         6 
7609     A         0 
9925     B         0 
9922     B         5 
9916     B         6
9917     B         8 
9914     C         2
9914     C         7
9914     C         7
9914     C         2
9914     C         9

新数据框应如下所示:
  NEW DF:
     id1  column Y   value
    9830     A         6 
    9925     B         0 
    9922     B         5 
    9914     C         2
    9914     C         7

此外,了解在给定 Y 列的情况下选择所有行 dateframe DF 的随机一半的解决方案会很有帮助(例如,不选择前 50%)。

任何帮助表示赞赏。
谢谢!

最佳答案

假设您希望每组行的前半部分具有相同的值 column Y对于我们向下舍入的奇数行,我们可以使用 filter来自 dplyr :

library(dplyr)
df %>% group_by(`column Y`) %>% filter(row_number() <= floor(n()/2))
##Source: local data frame [5 x 3]
##Groups: column Y [3]
##
##    id1 column Y laclen
##  <int>   <fctr>  <int>
##1  9830        A      6
##2  9925        B      0
##3  9922        B      5
##4  9914        C      2
##5  9914        C      7

我们先group_by column Y (注意反引号,因为列名包含空格)然后使用 filter仅保留 row_number 的行小于或等于 n() 给出的总行数为组除以 2 (并用 floor 向下舍入)。

要选择每组中随机 50% 的行,请使用 sample生成要保留的行号和 %in%匹配那些要保留的:
set.seed(123)
result <- df %>% group_by(`column Y`) %>% filter(row_number() %in% sample(seq_len(n()),floor(n()/2)))
##Source: local data frame [5 x 3]
##Groups: column Y [3]
##
##    id1 column Y laclen
##  <int>   <fctr>  <int>
##1  9830        A      6
##2  9922        B      5
##3  9917        B      8
##4  9914        C      2
##5  9914        C      9

关于r - 选择一列中给定值的数据框的一半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39805891/

相关文章:

使用 plm() 和 vcovHC() 进行 Hausman-Taylor 估计器的稳健标准误差估计

r - sqldf:按日期范围查询数据

R:data.table 与合并(聚合())性能

r - 按条件子集 data.table 但保留属于组的所有行

r - Traminer 中的多个事件

mysql - 获取查询的行数

php - Mysql Select,Where 语法从许多表中回显结果

php - 选择数组中的位置

Python - 使用两列条件对数据集进行子集化

R:删除少于特定阈值非零值的行