R 延长枢轴_,以保持两个立柱,并使其余立柱变长

R 延长枢轴_,以保持两个立柱,并使其余立柱变长,r,tidyverse,tidyr,R,Tidyverse,Tidyr,如何使一个长表保持两个字符列(a和B)不变,并将其余的转换为长格式 df <- data.frame(A=c("A", "B", "C"), B= c("AA", "BB", "CC"),`1`=c("1.9", "6.8", "4.7"), `2`=c("1.9", "6.8&qu

如何使一个长表保持两个字符列(a和B)不变,并将其余的转换为长格式

df <- data.frame(A=c("A", "B", "C"), B= c("AA", "BB", "CC"),`1`=c("1.9", "6.8", "4.7"), `2`=c("1.9", "6.8", "4.7"), `34`=c("3.9", "0.3", "2.7"), `39`=c("2.9", "2.3", "2.9"), `158`=c("2.9", "3", "45"),`190`=c("22.1", "7.4", "56"), check.names=FALSE)

library(dplyr)
library(tidyr)
df2<- df %>% pivot_longer(cols = c(A,B), names_to = 'Number', values_to = 'Value') %>% type.convert(as.is = T) %>% 
  mutate(Variable = case_when(Number %in% c(1,2) ~ 'WW', Number %in% c(34,39) ~ 'MM', TRUE ~ 'EE')) %>% 
   select('Letter' = A, B, Number, Variable, Value)

如果希望长格式的数据
A
B
保持原样,请将其从
cols
中删除:

library(dplyr)
library(tidyr)

df %>% 
  pivot_longer(cols = -c(A,B), names_to = 'Number', values_to = 'Value') %>% 
  type.convert(as.is = T) %>% 
  mutate(Variable = case_when(Number %in% c(1,2) ~ 'WW', 
                              Number %in% c(34,39) ~ 'MM', TRUE ~ 'EE')) %>%
  select(One = A, two = B, Number, Variable, Value)

# A tibble: 18 x 5
#   One   two   Number Variable Value
#   <chr> <chr>  <int> <chr>    <dbl>
# 1 A     AA         1 WW         1.9
# 2 A     AA         2 WW         1.9
# 3 A     AA        34 MM         3.9
# 4 A     AA        39 MM         2.9
# 5 A     AA       158 EE         2.9
# 6 A     AA       190 EE        22.1
# 7 B     BB         1 WW         6.8
# 8 B     BB         2 WW         6.8
# 9 B     BB        34 MM         0.3
#10 B     BB        39 MM         2.3
#11 B     BB       158 EE         3  
#12 B     BB       190 EE         7.4
#13 C     CC         1 WW         4.7
#14 C     CC         2 WW         4.7
#15 C     CC        34 MM         2.7
#16 C     CC        39 MM         2.9
#17 C     CC       158 EE        45  
#18 C     CC       190 EE        56  
库(dplyr)
图书馆(tidyr)
df%>%
pivot_更长(cols=-c(A,B),name_to='Number',values_to='Value')%>%
type.convert(as.is=T)%>%
在%c(1,2)中的(数字%)~'WW'时,mutate(Variable=case_),
%c(34,39)~'MM',TRUE~'EE'))中的数字百分比%>%
选择(一=A,二=B,数字,变量,值)
#一个tibble:18x5
#一个两个数字的变量值
#           
#1 A AA 1 WW 1.9
#2 A AA 2 WW 1.9
#3 A AA 34毫米3.9毫米
#4 A AA 39毫米2.9毫米
#5 A AA 158 EE 2.9
#6 A AA 190 EE 22.1
#7 B BB 1 WW 6.8
#8 B BB 2 WW 6.8
#9 B BB 34毫米0.3
#10 B BB 39毫米2.3
#11 B BB 158 EE 3
#12 B BB 190 EE 7.4
#13 C CC 1 WW 4.7
#14 C CC 2 WW 4.7
#15立方厘米34毫米2.7毫米
#16立方厘米39毫米2.9毫米
#17 C CC 158 EE 45
#18 C CC 190 EE 56
library(dplyr)
library(tidyr)

df %>% 
  pivot_longer(cols = -c(A,B), names_to = 'Number', values_to = 'Value') %>% 
  type.convert(as.is = T) %>% 
  mutate(Variable = case_when(Number %in% c(1,2) ~ 'WW', 
                              Number %in% c(34,39) ~ 'MM', TRUE ~ 'EE')) %>%
  select(One = A, two = B, Number, Variable, Value)

# A tibble: 18 x 5
#   One   two   Number Variable Value
#   <chr> <chr>  <int> <chr>    <dbl>
# 1 A     AA         1 WW         1.9
# 2 A     AA         2 WW         1.9
# 3 A     AA        34 MM         3.9
# 4 A     AA        39 MM         2.9
# 5 A     AA       158 EE         2.9
# 6 A     AA       190 EE        22.1
# 7 B     BB         1 WW         6.8
# 8 B     BB         2 WW         6.8
# 9 B     BB        34 MM         0.3
#10 B     BB        39 MM         2.3
#11 B     BB       158 EE         3  
#12 B     BB       190 EE         7.4
#13 C     CC         1 WW         4.7
#14 C     CC         2 WW         4.7
#15 C     CC        34 MM         2.7
#16 C     CC        39 MM         2.9
#17 C     CC       158 EE        45  
#18 C     CC       190 EE        56