Re: [问题] data frame捞取资料-复杂条件

楼主: celestialgod (天)   2016-04-07 02:46:47
※ 引述《aee36900 (持久战!!)》之铭言:
: [问题叙述]:
:
: 延续上个data frame 捞取特定资料问题,但是条件比较复杂
: 我需要c1 c2条件下的c3作为筛选条件
: 程式我尝试用下面的方式叙述
: 但是没有效果@@
: 想请问哪边需要修改
:
: [程式范例]:
:
: df <- df[df$c3 %in% df[df$c1 >= '0.xxx' & df$c2 == 1,c3],]
:
: [关键字]:
:
: data frame select condition row column
好读版:http://pastebin.com/nY3KvCmd
# 资料生成
set.seed(500)
dat <- data.frame(c1 = rnorm(10), c2 = sample(1:3, 10, TRUE),
c3 = sample(LETTERS[1:5], 10, TRUE))
# c1 c2 c3
# 1 0.96848929 1 A
# 2 1.96536781 3 A
# 3 0.88632253 1 D
# 4 0.03054026 2 A
# 5 0.94955742 1 B
# 6 -0.57673001 3 E
# 7 0.72152335 3 E
# 8 0.61909890 3 A
# 9 0.02100582 1 E
# 10 0.27485018 1 A
# 推文前两行说的方法
dat[dat$c3 %in% dat[dat$c1 >= 0.9 & dat$c2 == 1, 'c3'], ]
# c1 c2 c3
# 1 0.96848929 1 A
# 2 1.96536781 3 A
# 4 0.03054026 2 A
# 5 0.94955742 1 B
# 8 0.61909890 3 A
# 10 0.27485018 1 A
# 推文补充的dplyr方法
library(dplyr)
dat %>% filter(c3 %in% (dat %>% filter(c1 >= 0.9, c2 == 1) %>% .$c3))
# c1 c2 c3
# 1 0.96848929 1 A
# 2 1.96536781 3 A
# 3 0.03054026 2 A
# 4 0.94955742 1 B
# 5 0.61909890 3 A
# 6 0.27485018 1 A
作者: aee36900 (持久战!!)   2016-04-07 10:36:00
感谢c大,自己一直验证错误因为没注意C2的内容

Links booklink

Contact Us: admin [ a t ] ucptt.com