在 R 中同时透视表多个变量

问题描述 投票:0回答:1

我有一个如下所示的数据框:

df <- data.frame(residence_pre = c("house", "apartment", "house"),
                 residence_during = c("house", "apartment", "house"),
                 residence_after = c("house", "apartment", "house"),
                 family_pre = c(1,2,3),
                 family_during = c(2,2,4),
                 family_after = c(1,2,4))

我想以如下方式旋转它: (这是示例数据。真实数据框中还有更多列,都遵循这种模式)

pivot <- data.frame(obs.number = c(1, 1, 1, 2, 2, 2, 3, 3, 3),
                    residence = c("house", "house", "house", "apartment", "apartment", "apartment", "house", "house", "house"),
                    family = c(1, 2, 1, 2, 2, 2, 3, 4, 4),
                    status = c("pre", "during", "after", "pre", "during", "after", "pre", "during", "after"))
r dataframe pivot-table
1个回答
0
投票

这是您可以尝试的方法

df2 <- df %>% mutate(obs.number=row_number()) %>% 
  pivot_longer(cols = c(residence_pre,residence_during,residence_after),
               names_to = 'status', values_to = 'residence', 
               names_prefix='residence_') %>% select(status,residence,obs.number)

df3<- df %>% mutate(obs.number=row_number()) %>% 
  pivot_longer(cols = c(family_pre,family_during,family_after),
               names_to = 'status', values_to = 'family', 
               names_prefix='family_') %>% select(status,family,obs.number)

df4 <- df2 %>% left_join(df3, by=c('status','obs.number'))


# A tibble: 9 × 4
  status residence obs.number family
  <chr>  <chr>          <int>  <dbl>
1 pre    house              1      1
2 during house              1      2
3 after  house              1      1
4 pre    apartment          2      2
5 during apartment          2      2
6 after  apartment          2      2
7 pre    house              3      3
8 during house              3      4
9 after  house              3      4
© www.soinside.com 2019 - 2024. All rights reserved.