Group_by,条件求和并替换R中的变量
Posted
技术标签:
【中文标题】Group_by,条件求和并替换R中的变量【英文标题】:Group_by, conditional sum and replace the variables in R 【发布时间】:2022-01-17 17:25:40 【问题描述】:我想将这两行从 Stata 转换成 R 代码:
bysort sj hid: generate H = sum( d ) if f == 1 & ( d == 1 | d == 2 )
bysort sj hid: replace H = H[ _N ] if f == 1 & ( d == 1 | d == 2 )
据我了解,结果应如下所示:
sj | hid | f | d | H |
---|---|---|---|---|
2000 | 27 | 0 | 1 | 0 |
2000 | 60 | 1 | 1 | 1 |
2000 | 302 | 1 | 1 | 3 |
2000 | 302 | 1 | 2 | 3 |
2000 | 302 | 1 | 3 | 0 |
我用过
H = ifelse(f==1 & (d==1 | d==2), ave(d,sj,hid, FUN = sum),0),
但是,我得到了这个结果:
sj | hid | f | d | H |
---|---|---|---|---|
2000 | 27 | 0 | 1 | 0 |
2000 | 60 | 1 | 1 | 1 |
2000 | 302 | 1 | 1 | 6 |
2000 | 302 | 1 | 2 | 6 |
2000 | 302 | 1 | 3 | 0 |
我想知道如何更改我在 R 中的代码以在 hid 302 中获得 H=3 而不是 6。 另外,我想知道我应该如何编写 R 代码来获得第二步,这给了我以下结果:
sj | hid | f | d | H |
---|---|---|---|---|
2000 | 27 | 0 | 1 | 0 |
2000 | 60 | 1 | 1 | 1 |
2000 | 302 | 1 | 1 | 3 |
2000 | 302 | 1 | 2 | 3 |
2000 | 302 | 1 | 3 | 0 |
有类似这样的代码吗?这个不行:
test_H %>%
group_by(sj, hid) %>%
if (f==1 & (d==1 | d==2))
H = replace(test_H,H,[_N])
【问题讨论】:
FWIW,Stata 单线是bysort sj hid : egen H = total(cond(f == 1 & (d == 1 | d == 2), d, 0))
,其中cond()
相当于ifelse()
。
欢迎来到 ***。这不是一个代码翻译网站。但是请尝试类似library(tidyverse); test_H %>% mutate(H = case_when(f == 1 & d %in% c(1,2) ~ H[n()], TRUE ~ H))
的方法。 Mutate 用于在使用 tidyverse 时转换列,case_when 基本上是 tidyverse 术语中的“if else”。或者test_H %>% group_by(sj, hid) %>% mutate(H = case_when(f == 1 & d %in% c(1, 2) ~ last(H), TRUE ~ H)
,如果我们需要通过sj
和hid
列(也展示last
函数)进行摸索。
我不明白你的stata代码中第一行的需要。看,我不是 R 专家,所以我不知道任何一个班轮,但我认为你可以通过创建一个数据框来实现这一点,计算在 sj
和 hid
级别(group_by()
),然后加入结果到源数据框。 stata代码中的第二行基本上是在数d
。
sum()
在 Stata 中产生累积或运行总和,因此原始 Stata 代码计算不同组的此类累积总和,然后查看每组的最后一次观察以查看每个总和或总和。如前所述,您不必那样做。
@NickCox 感谢您的贡献!我也是这样理解的。但是,如果 H 仅使用 d=1 或 2 或包括 d=3(第一个表或第二个表)计算总和,那么在 stata 中让我感到困惑的是?
【参考方案1】:
感谢以上所有答案。我发现这很有帮助。
How to sum variables in groups by condition with ave()?
它给了我现在想要的结果。
H=ifelse(f==1 & (d==1|d==2),ave(d*(d==1|d==2),sj,hid,FUN = sum),0)
【讨论】:
以上是关于Group_by,条件求和并替换R中的变量的主要内容,如果未能解决你的问题,请参考以下文章