如何解决当变量在 R 数据
我是 R 的新手。 我有一个数据库(面板),我想根据某些值删除一些观察结果。 我们以下一个面板为例(派生自 plm 包):
Panel <-read.dta("http://dss.princeton.edu/training/Panel101.dta")
> head(Panel)
country year y y_bin x1 x2 x3 opinion op
1 A 1990 1342787840 1 0.2779036 -1.1079559 0.28255358 Str agree 1
2 A 1991 -1899660544 0 0.3206847 -0.9487200 0.49253848 disag 0
3 A 1992 -11234363 0 0.3634657 -0.7894840 0.70252335 disag 0
4 A 1993 2645775360 1 0.2461440 -0.8855330 -0.09439092 disag 0
5 A 1994 3008334848 1 0.4246230 -0.7297683 0.94613063 disag 0
6 A 1995 3229574144 1 0.4772141 -0.7232460 1.02968037 Str agree 1
当 OP=1 时,我想删除下一年的观测值。 例如,如果在 1990 年,OP = 1,我想排除 1991、1992、1992 年等(数据库接下来的所有年份)的国家/地区。如果 1996 年 OP =1,我想排除 1997、1998 和 1999 年的国家。
PS:数据帧可能不是一个很好的例子,但在我的数据帧中,OP = 1 只有一次。
有人知道我该怎么做吗?
提前致谢。
编辑:我忘了说我还想保留每年 OP=0 的观察结果。我正在运行一个 logit 模型。因此我比较 OP=1 和 OP=0。
解决方法
我假设您要为每个 country
分别删除 OP 中 1 之后的所有行。
将 dplyr
与 filter
一起使用:
library(dplyr)
Panel <- foreign::read.dta("http://dss.princeton.edu/training/Panel101.dta")
Panel %>%
group_by(country) %>%
filter(row_number() <= match(1,op)) %>%
ungroup
# country year y y_bin x1 x2 x3 opinion op
# <fct> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <fct> <dbl>
# 1 A 1990 1342787840 1 0.278 -1.11 0.283 Str agree 1
# 2 B 1990 -5934699520 0 -0.0818 1.43 0.0234 Agree 1
# 3 C 1990 -1292379264 0 1.31 -1.29 0.204 Agree 1
# 4 D 1990 1883025152 1 -0.314 1.74 0.647 Disag 0
# 5 D 1991 6037768704 1 0.360 2.13 1.10 Disag 0
# 6 D 1992 10244189 1 0.0519 1.68 0.970 Str agree 1
# 7 E 1990 1342787840 1 0.453 1.73 0.597 Str disag 0
# 8 E 1991 2296009472 1 0.419 1.71 0.793 Str agree 1
# 9 F 1990 1342787840 1 -0.568 -0.347 1.26 Str agree 1
#10 G 1990 1342787840 1 0.945 -1.52 1.45 Str disag 0
#11 G 1991 -1518985728 0 1.10 -1.46 1.44 Agree 1
或与 slice
相同:
Panel %>%
group_by(country) %>%
slice(seq_len(match(1,op))) %>%
ungroup
,
我们可以使用slice
library(dplyr)
Panel %>%
group_by(country) %>%
slice(seq_len(match(1,op))) %>%
ungroup
数据
Panel <- foreign::read.dta("http://dss.princeton.edu/training/Panel101.dta")
,
你的回答很棒。但实际上,我忘了在问题中准确说明一些问题。您的回答使我能够保留 op=1 的观察结果。但我也想保留那些每年 OP=0 的人。我正在运行一个 logit 模型。顺便说一下,OP=0 的人将是非采用者,而 OP=1 的人将是采用者。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。