반응형
특정 순서로 벡터에 따라 데이터 프레임 행 순서
아래 짧은 예에서 구현 한 것과 같이 "대상"벡터에 따라 데이터 프레임의 행이 정렬되도록하는 더 쉬운 방법이 있습니까?
df <- data.frame(name = letters[1:4], value = c(rep(TRUE, 2), rep(FALSE, 2)))
df
# name value
# 1 a TRUE
# 2 b TRUE
# 3 c FALSE
# 4 d FALSE
target <- c("b", "c", "a", "d")
이것은 어떻게 든 일을 끝내기에는 너무 복잡합니다.
idx <- sapply(target, function(x) {
which(df$name == x)
})
df <- df[idx,]
rownames(df) <- NULL
df
# name value
# 1 b TRUE
# 2 c FALSE
# 3 a TRUE
# 4 d FALSE
시도 match
:
df <- data.frame(name=letters[1:4], value=c(rep(TRUE, 2), rep(FALSE, 2)))
target <- c("b", "c", "a", "d")
df[match(target, df$name),]
name value
2 b TRUE
3 c FALSE
1 a TRUE
4 d FALSE
그것은 한 당신이로 작동 target
정확히 같은 요소를 포함 df$name
하고, 둘은 중복 값을 포함하지 않습니다.
보낸 사람 ?match
:
match returns a vector of the positions of (first) matches of its first argument
in its second.
따라서 의 요소 match
와 일치하는 행 번호를 찾은 target
다음 df
순서대로 반환 합니다.
이 방법은 약간 다르므로 이전 답변보다 약간 더 유연합니다. 그것을 주문 된 요소로 만들면 잘 사용할 수 있습니다 arrange
. gdata
패키지 에서 reorder.factor를 사용했습니다 .
df <- data.frame(name=letters[1:4], value=c(rep(TRUE, 2), rep(FALSE, 2)))
target <- c("b", "c", "a", "d")
require(gdata)
df$name <- reorder.factor(df$name, new.order=target)
다음으로 지금 주문한다는 사실을 사용하십시오.
require(dplyr)
df %>%
arrange(name)
name value
1 b TRUE
2 c FALSE
3 a TRUE
4 d FALSE
원래 (알파벳) 순서로 as.character()
돌아가려면 원래 상태로 되돌리려면 사용 하십시오.
내가 사용하는 것을 선호 ***_join
에 dplyr
나는 데이터와 일치해야 할 때마다. 이것에 대한 한 가지 가능한 시도
left_join(data.frame(name=target),df,by="name")
에 대한 입력 ***_join
에는 tbls 또는 data.frame 이 필요합니다.
반응형
'IT박스' 카테고리의 다른 글
파이썬에서 함수 인수로 목록을 확장하는 방법 (0) | 2020.06.23 |
---|---|
단위 테스트를 위해 C #에서 파일 시스템을 어떻게 모방합니까? (0) | 2020.06.23 |
MySQL의 구분 기호 (0) | 2020.06.23 |
웹 페이지를 통해 PHP 스크립트에 매개 변수를 전달하려면 어떻게합니까? (0) | 2020.06.23 |
"양식이 연결되지 않아서 양식 제출이 취소되었습니다"오류가 발생 함 (0) | 2020.06.23 |