是否可以使用2组测量变量重塑R中的数据

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

我想从宽到长格式重塑格式,但是我有两组变量。是否可以使用一个熔体来获取下面的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吗?

r
2个回答
1
投票

考虑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


0
投票

这是一种方法,但是我会坚持使用两个Pivoting vignette或等效的melt

tidyverse
© www.soinside.com 2019 - 2024. All rights reserved.