说
data=structure(list(x1 = c(88L, 88L, 94L, 82L, 68L, 72L, 43L, 84L,
65L, 91L, 65L, 80L, 82L, 63L, 67L, 58L, 100L, 32L, 75L, 66L,
30L, 12L, 97L, 58L, 14L, 64L), group = structure(c(2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("female", "male"), class = "factor")), .Names = c("x1",
"group"), class = "data.frame", row.names = c(NA, -26L))
在这个数据中有组变量(性别(男性和女性)我需要获得统计平均值和25%的所有男性在女性之前 . 男性在女性之后,我不接触 . 女性我不接触 . 所以作为输出
x1 group mean 25%
88 male 76,36 66,5
88 male 76,36 66,5
94 male 76,36 66,5
82 male 76,36 66,5
68 male 76,36 66,5
72 male 76,36 66,5
43 male 76,36 66,5
84 male 76,36 66,5
65 male 76,36 66,5
91 male 76,36 66,5
65 male 76,36 66,5
80 female
82 female
63 female
67 female
58 female
100 female
32 female
75 male
66 male
30 male
12 male
97 male
58 male
14 male
64 male
怎么做?
编辑
x1 group
88 male
88 male
94 male
82 male
68 male
72 male
43 male
84 male
65 male
91 male
65 male
80 female
82 female
63 female
67 female
58 female
100 female
32 female
**76,36 male
**76,36 male
30 male
12 male
**76,36 male
58 male
14 male
64 male
结果 .
4 回答
要根据您提到的逻辑更新
x1
列,您可以使用:我添加的额外代码(
mutate
)仅为女性之后的男性更新x1
(即group2 = 3') and only if
x1`大于分位数值 .在
data.table
中,您可以编辑rleid(group) == 1
的行,即第一组行,按group
的值分组 .结果
这是另一种
dplyr
方法,它由rleid()
group汇总并使用left_join()
附加结果列:请注意,除非将结果分配回
data
,否则不会修改data
.这也是一种替代方法,它可以回答OP的原始问题以及OP在评论here和here中提出的其他问题 .
对于这两个问题,我们需要计算第一组男性的聚合,然后通过第一个问题的更新连接和第二个问题的更新非等连接通过引用更新
data
.计算第一组男性的聚合
原始问题:附加第一个男性组的统计数据
这是通过更新连接实现的
请注意,
data
已通过引用更新,即无需复制 .其他问题:修改第二个男性组中的选定值
OP已要求替换第二男性组中的任何
x1
值,该值超过为第一个男性组计算的25%分位数q25
,计算第一个男性组的平均值 . 请注意,第二个男性群体由rleid == 3L
识别,因为女性群体介于两者之间 .这可以通过更新非equi连接来实现 . 连接条件仅选择属于
rleid == 3L
且x1
更大q25
的行 .请注意第19行和第23行已按要求更新 . 同样,
data
通过引用更新 .