gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:09:41 24 4
gpt4 key购买 nike

我想选择其中一列中给定值的数据框的一半。换句话说,从下面给出的数据框中,我需要提取 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com