在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,但我真的无法提出一种解决方案。谢谢!
答案 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