dplyr의 문자열 열에서 여러 값 필터링
나는이 data.frame
열 중 하나에서 문자 데이터로. data.frame
동일한 열에서 여러 옵션을 필터링하고 싶습니다 . 내가 놓친 쉬운 방법이 있습니까?
예 : data.frame
이름 =dat
days name
88 Lynn
11 Tom
2 Chris
5 Lisa
22 Kyla
1 Tom
222 Lynn
2 Lynn
나는 필터링하고 싶습니다 Tom
및 Lynn
예를 들면.
내가 할 때 :
target <- c("Tom", "Lynn")
filt <- filter(dat, name == target)
이 오류가 발생합니다.
longer object length is not a multiple of shorter object length
%in%
대신 다음이 필요 합니다 ==
.
library(dplyr)
target <- c("Tom", "Lynn")
filter(dat, name %in% target) # equivalently, dat %>% filter(name %in% target)
생산
days name
1 88 Lynn
2 11 Tom
3 1 Tom
4 222 Lynn
5 2 Lynn
이유를 이해하려면 여기에서 어떤 일이 발생하는지 고려하십시오.
dat$name == target
# [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
기본적으로 2 개의 길이 target
벡터를 4 번 재활용하여 dat$name
. 즉, 우리는 다음을 수행하고 있습니다.
Lynn == Tom
Tom == Lynn
Chris == Tom
Lisa == Lynn
... continue repeating Tom and Lynn until end of data frame
이 경우 데이터 프레임에 재활용을 허용하지 않는 행 수가 실제로 다른 것으로 의심되기 때문에 오류가 발생하지 않지만 제공 한 샘플은 수행합니다 (8 행). 샘플에 홀수의 행이 있었다면 나는 당신과 같은 오류를 얻었을 것입니다. 그러나 재활용이 작동하더라도 이것은 분명히 원하는 것이 아닙니다. 기본적으로이 진술 dat$name == target
은 다음과 같이 말하는 것과 같습니다.
TRUE
"Tom"과 같은 모든 홀수 값 또는 "Lynn"과 같은 모든 짝수 값에 대해 반환 합니다.
따라서 샘플 데이터 프레임의 마지막 값이 짝수이고 "Lynn"과 같으므로 TRUE
위 값이됩니다.
대조적으로 다음과 dat$name %in% target
같이 말합니다.
의 각 값에 대해에
dat$name
존재하는지 확인하십시오target
.
아주 다릅니다. 결과는 다음과 같습니다.
[1] TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE
귀하의 문제는 dplyr
.NET의 오용 과 관련이 없습니다 ==
.
base
패키지 사용 :
df <- data.frame(days = c(88, 11, 2, 5, 22, 1, 222, 2), name = c("Lynn", "Tom", "Chris", "Lisa", "Kyla", "Tom", "Lynn", "Lynn"))
# Three lines
target <- c("Tom", "Lynn")
index <- df$name %in% target
df[index, ]
# One line
df[df$name %in% c("Tom", "Lynn"), ]
산출:
days name
1 88 Lynn
2 11 Tom
6 1 Tom
7 222 Lynn
8 2 Lynn
사용 sqldf
:
library(sqldf)
# Two alternatives:
sqldf('SELECT *
FROM df
WHERE name = "Tom" OR name = "Lynn"')
sqldf('SELECT *
FROM df
WHERE name IN ("Tom", "Lynn")')
이는 CRAN에서 사용할 수있는 dplyr 패키지를 사용하여 수행 할 수 있습니다. 이를 달성하는 간단한 방법 :
dplyr
패키지를 설치하십시오 .library(dplyr) df<- select(filter(dat,name=='tom'| name=='Lynn',c('days','name))
설명:
따라서 dplyr을 다운로드하면이 패키지의 두 가지 다른 기능을 사용하여 새 데이터 프레임을 만듭니다.
filter: the first argument is the data frame; the second argument is the condition by which we want it subsetted. The result is the entire data frame with only the rows we wanted. select: the first argument is the data frame; the second argument is the names of the columns we want selected from it. We don’t have to use the names() function, and we don’t even have to use quotation marks. We simply list the column names as objects.
참고URL : https://stackoverflow.com/questions/25647470/filter-multiple-values-on-a-string-column-in-dplyr
'Programing' 카테고리의 다른 글
방법 : Ubuntu 11.10에 Imagick (php 용) 설치 (0) | 2020.11.26 |
---|---|
애플리케이션 컨텍스트 초기화 이벤트에 후크를 추가하는 방법은 무엇입니까? (0) | 2020.11.26 |
지연으로 관찰 가능 항목을 생성하려면 어떻게해야합니까? (0) | 2020.11.26 |
Angular 4+ : 경로로 수동 리디렉션 (0) | 2020.11.26 |
한 테이블에서 다른 테이블로 SQL 데이터 이동 (0) | 2020.11.26 |