将一列分成多个变量,并使df长

时间:2020-08-19 08:21:29

标签: split long-integer

在R中重塑我的数据框时,我有些困惑。假设我有一个这样的数据框:

SVI     SDI     CVI     CDE
12      10      5        3
11      9       4        2

所以每一列代表一组子变量,我现在想像这样保持区别:

Value    First_letter  Second_letter  Third_letter 
12       S              V             I
11       S              V             I
10       S              D             I
9        S              D             I
5        C              V             I
4        C              V             I
3        C              D             E
2        C              D             E

有没有一种方法可以避免手动执行此操作?我当时在考虑使用Reshape2,但我真的无法提出一种解决方案。谢谢!

1 个答案:

答案 0 :(得分:0)

这是使用tidyr(tidyverse的一部分)的解决方案。

library(tidyr)

# your initial dataset
df = data.frame(SVI = c(12,11),
                SDI = c(10,9),
                CVI = c(5,4),
                CDE = c(3,2))

# The output you want
df_pivot = df %>% 
  pivot_longer(1:length(.)) %>% 
  separate(name, into = c("First_letter", "Second_letter", "Third_letter"), sep = c(1,2,3)) # see ?separate for more informations

输出:

df_pivot
# A tibble: 8 x 4
  First_letter Second_letter Third_letter value
  <chr>        <chr>         <chr>        <dbl>
1 S            V             I               12
2 S            D             I               10
3 C            V             I                5
4 C            D             E                3
5 S            V             I               11
6 S            D             I                9
7 C            V             I                4
8 C            D             E                2
相关问题