반응형
R 일 년으로 여러 열을 퍼 나르고 있음
이 표본 변수 사용
df <- data.frame(month=rep(1:3,2),
student=rep(c("Amy", "Bob"), each=3),
A=c(9, 7, 6, 8, 6, 9),
B=c(6, 7, 8, 5, 6, 7))
사용할 수 있습니다spread부터tidyr이것을 와이드 포맷으로 바꾸려고 합니다.
> df[, -4] %>% spread(student, A)
month Amy Bob
1 1 9 8
2 2 7 6
3 3 6 9
하지만 두 가지 값을 어떻게 퍼트리나요? 예를 들어 둘 다A그리고.B, 그 결과가 어떤 것과 같도록.
month Amy.A Bob.A Amy.B Bob.B
1 1 9 8 6 5
2 2 7 6 7 6
3 3 6 9 8 7
다음은 다음과 같은 방법으로 가능한 단순하고 매우 효율적인 솔루션을 제공합니다.data.table
library(data.table) ## v >= 1.9.6
dcast(setDT(df), month ~ student, value.var = c("A", "B"))
# month Amy_A Bob_A Amy_B Bob_B
# 1: 1 9 8 6 5
# 2: 2 7 6 7 6
# 3: 3 6 9 8 7
아니면 가능성이tidyr해결책
df %>%
gather(variable, value, -(month:student)) %>%
unite(temp, student, variable) %>%
spread(temp, value)
# month Amy_A Amy_B Bob_A Bob_B
# 1 1 9 6 8 5
# 2 2 7 7 6 6
# 3 3 6 8 9 7
EDIT 22/10/2019
@gjabel에 의해 언급된 것처럼, 새로운 tidyr 버전(v1.0.0+)은 이제pivot_wider그리고.pivot_longer함수(현재 성숙 상태), 따라서 새로운 접근 방식은
pivot_wider(data = df,
id_cols = month,
names_from = student,
values_from = c("A", "B"))
# # A tibble: 3 x 5
# month A_Amy A_Bob B_Amy B_Bob
# <int> <dbl> <dbl> <dbl> <dbl>
# 1 1 9 8 6 5
# 2 2 7 6 7 6
# 3 3 6 9 8 7
언급URL : https://stackoverflow.com/questions/30592094/r-spreading-multiple-columns-with-tidyr
반응형
'programing' 카테고리의 다른 글
| 페이지 로드가 완료되었는지 여부 감지 (0) | 2023.09.18 |
|---|---|
| jQuery mobile $문서.즉시 동등한 (0) | 2023.09.18 |
| naN 플로트를 c에서 생성하는 방법은? (0) | 2023.09.18 |
| MySQL 각각 여러 행으로 여러 테이블 결합 (0) | 2023.09.13 |
| 앱(Layout) XML 변수에서 매니페스트 버전 번호를 얻으려면 어떻게 해야 합니까? (0) | 2023.09.13 |