여러 조건을 기반으로 data.frame 그룹 필터링
Oct 13 2020
여러 조건에 따라 특정 빅 데이터 프레임 그룹의 값을 필터링하는 우아한 방법을 찾고 있습니다.
내 데이터 프레임은 다음과 같습니다.
data=data.frame(group=c("A","B","C","A","B","C","A","B","C"),
time= c(rep(1,3),rep(2,3), rep(3,3)),
value=c(0.2,1,1,0.1,10,20,10,20,30))
group time value
1 A 1 0.2
2 B 1 1.0
3 C 1 1.0
4 A 2 0.1
5 B 2 10.0
6 C 2 20.0
7 A 3 10.0
8 B 3 20.0
9 C 3 30.0
시점 1에서만 1보다 작지만 0.1보다 큰 모든 값을 필터링하고 싶습니다.
내 data.frame이 이렇게 보이기를 원합니다.
group time value
1 A 1 0.2
4 A 2 0.1
5 B 2 10.0
6 C 2 20.0
7 A 3 10.0
8 B 3 20.0
9 C 3 30.0
어떤 도움이라도 대단히 감사합니다.
답변
1 Adamm Oct 13 2020 at 12:36
또는 자유 시간이 너무 많고 피하기로 결정한 경우 dplyr:
ind <- with(data, (data$time==1 & (data$value > 0.1 & data$value < 1))) ind <- ifelse((data$time==1) & (data$value > 0.1 & data$value < 1), TRUE, FALSE)
#above two do the same
data$ind <- ind data <- data[!(data$time==1 & ind==F),]
data$ind <- NULL
group time value
1 A 1 0.2
4 A 2 0.1
5 B 2 10.0
6 C 2 20.0
7 A 3 10.0
8 B 3 20.0
9 C 3 30.0
3 RicS Oct 13 2020 at 12:03
dplyr당신 과 함께 할 수 있습니다
library(dplyr)
data %>% filter(!(time == 1 & (value <= 0.1 | value >= 1)))
# group time value
# 1 A 1 0.2
# 2 A 2 0.1
# 3 B 2 10.0
# 4 C 2 20.0
# 5 A 3 10.0
# 6 B 3 20.0
# 7 C 3 30.0
AlexB Oct 15 2020 at 10:36
또 다른 간단한 옵션은 subset두 번 사용한 다음 결과를 행 현명한 방식으로 추가하는 것입니다.
rbind(
subset(data, time == 1 & value > 0.1 & value < 1),
subset(data, time != 1)
)
# group time value
# 1 A 1 0.2
# 4 A 2 0.1
# 5 B 2 10.0
# 6 C 2 20.0
# 7 A 3 10.0
# 8 B 3 20.0
# 9 C 3 30.0