我想从宽到长格式重塑格式,但是我有两组变量。是否可以使用一个熔体来获取下面的FData2。我想用一个熔体来实现这一目标。因为我有很多设置可以从宽变长。
例如
id <- c(1,2,3,4,5,6,7,8,9,10)
Pc1 <- c(3,4,5,6,7,8,2,2,3,NA)
Pc2 <- c(NA,NA,4,6,7,8,8,9,6,7)
Rc1 <- c(5,4,5,NA,7,8,2,NA,3,NA)
Rc2 <- c(5,4,5,5,7,8,2,5,3,NA)
Data <- data.frame(id,Pc1,Pc2,Rc1,Rc2)
library(reshape2)
PC = melt(Data, id.vars = "id", measure.vars = ( c("Pc1", "Pc2")), variable.name = "var1" , value.name = "PC" )
RC = melt(Data, id.vars = "id", measure.vars = ( c("Rc1", "Rc2")),variable.name = "var2" , value.name = "RC" )
FData = cbind(PC,RC)
Fdata2 = FData[,c(1,2,5,3,6)]
所需的输出
id var1 var2 PC RC
1 1 Pc1 Rc1 3 5
2 2 Pc1 Rc1 4 4
3 3 Pc1 Rc1 5 5
4 4 Pc1 Rc1 6 NA
5 5 Pc1 Rc1 7 7
6 6 Pc1 Rc1 8 8
7 7 Pc1 Rc1 2 2
8 8 Pc1 Rc1 2 NA
9 9 Pc1 Rc1 3 3
10 10 Pc1 Rc1 NA NA
11 1 Pc2 Rc2 NA 5
12 2 Pc2 Rc2 NA 4
13 3 Pc2 Rc2 4 5
14 4 Pc2 Rc2 6 5
15 5 Pc2 Rc2 7 7
16 6 Pc2 Rc2 8 8
17 7 Pc2 Rc2 8 2
18 8 Pc2 Rc2 9 5
19 9 Pc2 Rc2 6 3
20 10 Pc2 Rc2 7 NA
我可以一次熔化生成FData2吗?
考虑tidyr::pivot_longer()
。多年前,“ Reshape2”软件包已由“ tidyr”替换。
我已经合并了tidyr::pivot_longer()
和var1
,因为它们看起来很多余。
var2
结果:
Data %>%
tidyr::pivot_longer(
-id,
names_to = c(".value", "set"),
names_pattern = "(Pc|Rc)(\\d)"
)
# A tibble: 20 x 4
id set Pc Rc
<dbl> <chr> <dbl> <dbl>
1 1 1 3 5
2 1 2 NA 5
3 2 1 4 4
4 2 2 NA 4
5 3 1 5 5
6 3 2 4 5
7 4 1 6 NA
8 4 2 6 5
9 5 1 7 7
10 5 2 7 7
11 6 1 8 8
12 6 2 8 8
13 7 1 2 2
14 7 2 8 2
15 8 1 2 NA
16 8 2 9 5
17 9 1 3 3
18 9 2 6 3
19 10 1 NA NA
20 10 2 7 NA
这是一种方法,但是我会坚持使用两个Pivoting vignette或等效的melt
tidyverse