programing

R 일 년으로 여러 열을 퍼 나르고 있음

mailnote 2023. 9. 18. 22:36
반응형

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

반응형