我有一个包含DX1到DX10列的数据集,其中字符变量用iCD9codes编码 我想用代码4289,4281,4282过滤我的数据集,该代码位于DX1到DX10的任何地方
使用dplyr更简单的方法吗?
答案 0 :(得分:1)
假设您要保留原始数据集中的所有列,有两种方法可以解决此问题:
1。使用filter_all
过滤所有列。这假设您的数据集仅包含DX1 - DX10
输入:
set.seed(10)
df <- tibble(DX1 = sample(4280:4380, 10),
DX2 = c(4281, sample(4200:4500, 9)),
DX3 = sample(4270:4310, 10),
DX4 = sample(4280:4295, 10))
df
# A tibble: 10 x 4
DX1 DX2 DX3 DX4
<int> <dbl> <int> <int>
1 4331 4281. 4304 4285
2 4310 4396. 4310 4288
3 4322 4370. 4293 4281
4 4347 4233. 4299 4282
5 4288 4377. 4283 4290
6 4301 4306. 4284 4284
7 4306 4326. 4294 4287
8 4305 4215. 4298 4289
9 4337 4277. 4277 4294
10 4319 4316. 4309 4291
方法:
df %>% filter_all(any_vars(. == 4282 | . == 4281 | . == 4289))
输出:
# A tibble: 4 x 4
DX1 DX2 DX3 DX4
<int> <dbl> <int> <int>
1 4331 4281. 4304 4285
2 4322 4370. 4293 4281
3 4347 4233. 4299 4282
4 4305 4215. 4298 4289
2。使用filter_at
过滤某些列。这假设您的数据集还包含除DX1-DX10之外的其他列。
输入:
set.seed(124)
df2 <- tibble(DX1 = sample(4280:4380, 10),
DX2 = c(4281, sample(4200:4500, 9)),
DX3 = sample(4250:4350, 10),
DX4 = sample(4280:4300, 10),
AA1 = sample(4280:4295, 10),
AA2 = c(sample(4500:5500, 9), 4289))
df2
# A tibble: 10 x 6
DX1 DX2 DX3 DX4 AA1 AA2
<int> <dbl> <int> <int> <int> <dbl>
1 4288 4281. 4253 4288 4285 4649.
2 4320 4432. 4312 4296 4282 4920.
3 4331 4457. 4309 4285 4291 5335.
4 4318 4426. 4257 4287 4288 5020.
5 4301 4453. 4290 4294 4294 4717.
6 4308 4321. 4282 4281 4284 4746.
7 4335 4216. 4269 4299 4283 4864.
8 4326 4370. 4328 4282 4292 4731.
9 4365 4419. 4274 4292 4281 5239.
10 4305 4459. 4326 4295 4289 4289.
方法:
df2 %>% filter_at(vars(starts_with("DX")), any_vars(. == 4282 | . == 4281 | . == 4289))
输出:
# A tibble: 3 x 6
DX1 DX2 DX3 DX4 AA1 AA2
<int> <dbl> <int> <int> <int> <dbl>
1 4288 4281. 4253 4288 4285 4649.
2 4308 4321. 4282 4281 4284 4746.
3 4326 4370. 4328 4282 4292 4731.
答案 1 :(得分:0)
x <- Y %>%
gather(key = "DX", value = "code", starts_with("DX")) %>%
filter(DX %in% c("4289", "4281", "4282"))
正如弗兰克在评论中指出的那样,dplyr
在数据整洁时效果最好,这意味着变量在列中,观察在行中。使用tidyr::gather
将数据合并为两列,一个名为key
的{{1}}列告诉您该值来自哪个列,以及DX
列,此处称为{{ 1}},即单元格中的数字。
然后很容易使用value
,因为您只需要一列,即新的code
列。
有关详细信息,请参阅本章tidy data。
答案 2 :(得分:0)
z&lt; -Y%&gt;%过滤器(DX1%in%c(&#34; 4289&#34;,&#34; 4281&#34;,&#34; 4282&#34;)| DX2%in %c(&#34; 4289&#34;,&#34; 4281&#34;,&#34; 4283&#34;)|%c中的DX3%(&#34; 4289&#34;,&#34; 4281&#34;,&#34; 4283&#34;)|%c中的DX4%(&#34; 4289&#34;,&#34; 4281&#34;,&#34; 4283&#34;)| DX5 %c%(&#34; 4289&#34;,&#34; 4281&#34;,&#34; 4283&#34;)|%c中的DX6%(&#34; 4289&#34;,&# 34; 4281&#34;,&#34; 4283&#34;)|%c中的DX7%(&#34; 4289&#34;,&#34; 4281&#34;,&#34; 4283&#34;) |%c中的DX8%(&#34; 4289&#34;,&#34; 4281&#34;,&#34; 4283&#34;)|%c中的DX9%(&#34; 4289&#34;, &#34; 4281&#34;,&#34; 4283&#34;)|%c中的DX10%(&#34; 4289&#34;,&#34; 4281&#34;,&#34; 4283&#34 ;))