r - R中类别内的子集条件
问题描述
我正在使用一个调查数据集 (ESS),每波包括几个国家,每波中有几个人。它看起来像这样:
国家 | 海浪 |
---|---|
在 | 1 |
在 | 1 |
在 | 1 |
在 | 2 |
在 | 3 |
在 | 3 |
在 | 4 |
在 | 4 |
在 | 5 |
在 | 6 |
在 | 7 |
在 | 8 |
在 | 9 |
在 | 9 |
是 | 1 |
是 | 2 |
是 | 2 |
是 | 3 |
是 | 4 |
是 | 5 |
是 | 6 |
是 | 7 |
是 | 7 |
是 | 9 |
是 | 9 |
我想过滤/子集数据以获得一个新的干净数据框,该数据框仅包含所有波浪中包含的国家,范围从 1 到 9。换句话说,我需要根据条件选择国家他们在所有 9 个波中都有观察。在上面的例子中,只有“AT”会被选择,因为“BE”缺少第 8 波。
这听起来很简单,但我正在努力寻找一种简单的方法来解决它(可能是因为我是 R 新手)。
非常感谢您的帮助。
解决方案
您可以在 中选择1 到 9 的Country
值。all
Wave
library(dplyr)
df1 <- df %>% group_by(Country) %>% filter(all(1:9 %in% Wave)) %>% ungroup
df1
# Country Wave
# <chr> <int>
# 1 AT 1
# 2 AT 1
# 3 AT 1
# 4 AT 2
# 5 AT 3
# 6 AT 3
# 7 AT 4
# 8 AT 4
# 9 AT 5
#10 AT 6
#11 AT 7
#12 AT 8
#13 AT 9
#14 AT 9
这也可以用基础 R 和data.table
-
#Base R
df1 <- subset(df, as.logical(ave(Wave, Country,
FUN = function(x) all(1:9 %in% x))))
#data.table
library(data.table)
setDT(df)[, .SD[all(1:9 %in% Wave)], Country]
推荐阅读
- javascript - Amcharts 将标签放置在某个 xy 位置
- javascript - 如何在数据表中添加计数器列..?
- c++ - 为什么 std::atomic::compare_exchange_xxx() 的预期参数不是 const &?
- javascript - 如何使用来自 AJAX 调用的数据
- typescript - withRouter 类型检查错误作为 react-router 的装饰器
- c - c - 通过 pthread_create 时套接字失败
- python - 使用 Apache 部署 Django 2.1 并且 mod_wsgi 提供超时
- laravel - Laravel api - 如何上传文件
- windows - 将 VS Code 与本机 Windows OpenSSH 客户端一起使用
- python - Stackexchange Python API 中的高级过滤