매우 적은 재생 코드가 있습니다. 실제 데이터 세트는 더 크고 많은 요소가 있으므로 수동으로 요소를 나열하는 것은 실용적이지 않습니다. dplyr을 계속 사용하고자하는 데이터에 대한 흥미로운 변환도 있습니다.두 데이터 프레임을 바인딩 할 때 요인을 병합하는 방법은 무엇입니까?
library(dplyr)
a = data.frame(f=factor(c("a", "b")), g=c("a", "a"))
b = data.frame(f=factor(c("a", "c")), g=c("a", "a"))
a = a %>% group_by(g) %>% mutate(n=1)
b = b %>% group_by(g) %>% mutate(n=2)
rbind(a,b)
이 생성됩니다
# A tibble: 4 x 3
# Groups: g [1]
f g n
<chr> <fctr> <dbl>
1 a a 1
2 b a 1
3 a a 2
4 c a 2
Warning messages:
1: In bind_rows_(x, .id) : Unequal factor levels: coercing to character
2: In bind_rows_(x, .id) :
binding character and factor vector, coercing into character vector
3: In bind_rows_(x, .id) :
binding character and factor vector, coercing into character vector
이러한 경고는 성가신이며, 나는이 group_by
사용하지 않은 경우 실제로 사라질 것 :
> a = data.frame(f=factor(c("a", "b")), g=c("a", "a"))
> b = data.frame(f=factor(c("a", "c")), g=c("a", "a"))
> a = a %>% mutate(n=1)
> b = b %>% mutate(n=2)
> rbind(a,b)
f g n
1 a a 1
2 b a 1
3 a a 2
4 c a 2
명시 적으로 data.frame
으로 변환 단지 rbind
전에도 작동 :
> rbind(data.frame(a),data.frame(b))
f g n
1 a a 1
2 b a 1
3 a a 2
4 c a 2
기본 변형 R 또는 dplyr rbind
/bind_rows
을 사용하면 데이터 변환을 위해 dplyr을 계속 사용하면서 문자로 변환하는 대신 해당 요소와 해당 레벨을 자동으로 병합 할 수 있습니까?
수동으로 요소를 병합하는 솔루션을 제안하는 https://stackoverflow.com/a/30468468/388803이 발견되었지만 이는 매우 장황합니다.
내 실제 사용 사례는 두 개의 .csv 파일을 read.table
으로로드하고 일부 데이터 변환을 수행 한 다음 데이터를 보완하면서 병합합니다. 현재로서는 데이터 변환이 끝난 후 data.frame(data)
으로 전화를 겁니다. dplyr/tibble이 이러한 상황에서 안전하다고 생각되는 이유를 자동으로 병합하지 않는 이유가 궁금합니다. 어쩌면 개선 될 수있는 것입니까?
경고를 피하기 위해 아마도 'factor' 열'levels'을 다른 데이터 세트의 'levels'을 수용하기 전에 변경할 수 있습니다. 'union '과 같은 정렬 – akrun
@akrun 네, 링크 된 게시물에서와 같이 할 수있는 방법 중 하나입니다. 그러나 이것을 수동으로하고 싶지는 않습니다. 실제 데이터 세트에는 많은 요소와 레벨이 있습니다. – eregon
또 다른 해결 방법은'stringsAsFactors = FALSE'를 사용하고'factor'로 원하는 컬럼을 _only 입력 파일을 묶는 것일 수 있습니다. – MichaelChirico