如何解决Pivot_longer保持两列,并让其余的列变长
如何制作一个长表,将两个字符列保持原样(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",`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)
我收到以下错误:
错误:无法对不存在的列进行子集化。 x列
One
没有 存在。
我认为错误是在pivot_longer(cols = HERE?
所需的输出:
One Two Number Variable Value
A AA 1 WW 1.9
A AA 2 WW 1.9
A AA 34 MM 3.9
A AA 39 MM 2.9
A AA 158 EE 2.9
A AA 190 EE 22.1
B BB 1 WW 6.8
B BB 2 WW 6.8
B BB 34 MM 0.3
B BB 39 MM 2.3
B BB 158 EE 3
B BB 190 EE 7.4
...
解决方法
如果您希望以长格式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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。