首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用pivot_longer()将数据从宽格式转换为长格式?

如何使用pivot_longer()将数据从宽格式转换为长格式?
EN

Stack Overflow用户
提问于 2021-04-08 02:32:12
回答 1查看 43关注 0票数 0

我有这样的数据:

代码语言:javascript
复制
cod_child<-c(1,1,1,2,2,2,7,7,9,11,11,11)
redcap_event_name<-c("visita_15_arm_1","visita_16_arm_1","visita_7_arm_1","visita_10_arm_1","visita_11_arm_1",
                     "visita_8_arm_1","visita_11_arm_1","visita_14_arm_1","visita_12_arm_1","visita_11_arm_1",
                     "visita_12_arm_1","visita_8_arm_1")
res_orin_crea<-c(88.5,58.2,70.2,62.4,142.0,42.9,26.9,17.1,148.0,26.1,NA,33.7)
res_orin_crea_tipo<-c(1,1,1,1,1,1,1,1,1,1,NA,1)
res_orin_dis24dcp<-c(0.8, NA, 0.9, 0.3, NA, 0.4, NA, NA, NA, 0.2, NA, 0.1)
res_orin_dis24dcp_tipo<-c(3,3,3,3,3,3,3,3,3,3,3,3)

df<-data.frame(cod_child,redcap_event_name,res_orin_crea,res_orin_crea_tipo,res_orin_dis24dcp,res_orin_dis24dcp_tipo)  
df

   cod_child redcap_event_name res_orin_crea res_orin_crea_tipo res_orin_dis24dcp res_orin_dis24dcp_tipo
1          1   visita_15_arm_1          88.5                  1               0.8                      3
2          1   visita_16_arm_1          58.2                  1                NA                      3
3          1    visita_7_arm_1          70.2                  1               0.9                      3
4          2   visita_10_arm_1          62.4                  1               0.3                      3
5          2   visita_11_arm_1         142.0                  1                NA                      3
6          2    visita_8_arm_1          42.9                  1               0.4                      3
7          7   visita_11_arm_1          26.9                  1                NA                      3
8          7   visita_14_arm_1          17.1                  1                NA                      3
9          9   visita_12_arm_1         148.0                  1                NA                      3
10        11   visita_11_arm_1          26.1                  1               0.2                      3
11        11   visita_12_arm_1            NA                 NA                NA                      3
12        11    visita_8_arm_1          33.7                  1               0.1                      3

我想要这样的数据:

代码语言:javascript
复制
cod_child redcap_event_name compound concentration tipo
1          1   visita_15_arm_1     crea          88.5    1
2          1   visita_15_arm_1 dis24dcp           3.0    3
3          1   visita_16_arm_1     crea          58.2    1
4          1   visita_16_arm_1 dis24dcp           3.0    3
5          1    visita_7_arm_1     crea          70.2    1
6          1    visita_7_arm_1 dis24dcp           3.0    3
7          2   visita_10_arm_1     crea          62.4    1
8          2   visita_10_arm_1 dis24dcp           3.0    3
9          2   visita_11_arm_1     crea         142.0    1
10         2   visita_11_arm_1 dis24dcp           3.0    3
11         2    visita_8_arm_1     crea          42.9    1
12         2    visita_8_arm_1 dis24dcp           3.0    3
13         7   visita_11_arm_1     crea          26.9    1
14         7   visita_11_arm_1 dis24dcp           3.0    3
15         7   visita_14_arm_1     crea          17.1    1
16         7   visita_14_arm_1 dis24dcp           3.0    3
17         9   visita_12_arm_1     crea         148.0    1
18         9   visita_12_arm_1 dis24dcp           3.0    3
19        11   visita_11_arm_1     crea          26.1    1
20        11   visita_11_arm_1 dis24dcp           3.0    3
21        11   visita_12_arm_1     crea            NA   NA
22        11   visita_12_arm_1 dis24dcp           3.0    3
23        11    visita_8_arm_1     crea          33.7    1
24        11    visita_8_arm_1 dis24dcp           3.0    3

我可以这样做:

代码语言:javascript
复制
A<-df%>%
  select(-contains("_tipo"))%>%
  pivot_longer(cols = c(starts_with("res_orin_")),
               names_to = c("compound"),
               names_pattern = c("res_orin_?(.*)"),
               values_to = "concentration")%>%
  print()

B<-df%>%
  select(cod_child,redcap_event_name, contains("_tipo"))%>%
  pivot_longer(cols = c(starts_with("res_orin_")),
               names_to = c("compound"),
               names_pattern = c("res_orin_?(.*)"),
               values_to = "tipo")%>%
  print()

dataf<-cbind(A,B[,4])
dataf

但我认为这可能是一步就能做到的方法。我认为应该有一些与names_pattern的常规表现有关的东西,但我想不出来。有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-10 10:08:09

您可以尝试在旋转之前重命名这些列:

代码语言:javascript
复制
df%>%rename(res_orin_crea_concentration = res_orin_crea,
            res_orin_dis24dcp_concentration = res_orin_dis24dcp)%>%
     pivot_longer(cols = !c(cod_child, redcap_event_name), 
                  names_to = c("compound", ".value"), 
                  names_pattern="res_orin_(.+)_(.+)")

# A tibble: 24 x 5
   cod_child redcap_event_name compound concentration  tipo
       <dbl> <chr>             <chr>            <dbl> <dbl>
 1         1 visita_15_arm_1   crea              88.5     1
 2         1 visita_15_arm_1   dis24dcp           0.8     3
 3         1 visita_16_arm_1   crea              58.2     1
 4         1 visita_16_arm_1   dis24dcp          NA       3
 5         1 visita_7_arm_1    crea              70.2     1
 6         1 visita_7_arm_1    dis24dcp           0.9     3
 7         2 visita_10_arm_1   crea              62.4     1
 8         2 visita_10_arm_1   dis24dcp           0.3     3
 9         2 visita_11_arm_1   crea             142       1
10         2 visita_11_arm_1   dis24dcp          NA       3
# … with 14 more rows
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66996594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档