如何解决使用Tidyr转换为长表以在变量内生成子变量
通过在变量“变量” colulum I组1:2 = WW,34 = MM和158:190 = EE中生成子变量来转换为long。
df <- data.frame(A=c("A","B","C"),`1`=c("1.9","6.8","4.7"),`2`=c("1.9",`34`=c("3.9","0.3","2.7"),`158`=c("2.9","3","45"),`190`=c("22.1","7.4","56"),check.names=FALSE)
来自我的df:
1 2 34 158 190
A 1.9 1.9 3.9 2.9 22.1
B 6.8 6.3 0.3 3 7.4
C 4.7 4.7 2.7 45 56
所需的输出
Letter Number Variable Value
A 1 WW 1.9
A 2 WW 1.9
A 34 MM 3.9
A 158 EE 2.9
A 190 EE 22.1
B 1 WW 6.8
B 2 WW 6.8
B 34 MM 0.3
B 158 EE 3
B 190 EE 7.4
...
我尝试过此操作,但是我需要添加新的程序,包括MM,MM和EE。
library(tidyr)
data_long <- gather(df,Letter,value,1:90,factor_key=TRUE)
解决方法
这项工作:
library(dplyr)
library(tidyr)
df %>% pivot_longer(cols = !A,names_to = 'Number',values_to = 'Value') %>% type.convert(as.is = T) %>%
mutate(Variable = case_when(Number %in% c(1,2) ~ 'WW',Number == 34 ~ 'MM',TRUE ~ 'EE')) %>%
select('Letter' = A,Number,Variable,Value)
输出:
# A tibble: 15 x 4
Letter Number Variable Value
<chr> <int> <chr> <dbl>
1 A 1 WW 1.9
2 A 2 WW 1.9
3 A 34 MM 3.9
4 A 158 EE 2.9
5 A 190 EE 22.1
6 B 1 WW 6.8
7 B 2 WW 6.8
8 B 34 MM 0.3
9 B 158 EE 3
10 B 190 EE 7.4
11 C 1 WW 4.7
12 C 2 WW 4.7
13 C 34 MM 2.7
14 C 158 EE 45
15 C 190 EE 56
>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。