问题描述
在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,但我真的无法提出一种解决方案。谢谢!
解决方法
这是使用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