繁体   English   中英

如何从宽转换为长,使用两行作为 tidyverse 收集中的键和值?

[英]How can I convert from wide to long, using two rows for the key and value in tidyverse gather?

我正在尝试使用 tidyverse 的gather命令将我的数据从宽转换为长(我宁愿避免熔化/转换。)但是,我的数据有两个我想在转换中使用的匹配行。

 `2018 Data`  Codes   `Code1`  `Code2`   `Code3`           
1 ID          Names Code1Name Code2Name Code3Name 
2 1110        Crop…      0         0         0                       
3 1120        Anim…      0         0         0                       
4 1131        Timb…      0         0         0                                    

您会注意到数据很奇怪,因为有两行带有变量名,但第二行被视为观察的第一行。 代码和代号匹配,但我还没有找到一种方法来执行匹配它们的正确收集命令。 目前,我有类似df_tall<-gather(df_wide, key="Codes", value="CodeValue")但是,这与名称不正确匹配。

我想得到的理想数据如下:

ID                    Names             Codes    CodeValue
1 1110        Crop…   Code1Name         Code1     0                          
2 1110        Crop…   Code2Name         Code2     0                         
3 1110        Crop…   Code3Name         Code3     0                        

关于如何实现这一目标的任何想法?

StackOverflow 上关于从宽转换为长的问题很少,但我没有找到类似问题的运气(如果我忽略了一些问题,请纠正我)。

尝试这个:

DF <- data.frame(`2018 Data` = c("ID","1110","1120","1131"),
           Codes = c("Names","Crop..","Anim..","Timb.."),
           `Code1` = c("Code1Name","0","0","0"),
           `Code2` = c("Code2Name","0","0","0"),
           `Code3` = c("Code3Name","0","0","0"))

names(DF) <- unname(unlist(DF[1,]))

DF %>%
  filter(ID != "ID") %>%
  pivot_longer(starts_with("Code"), names_to = "Codes", values_to = "Value") %>%
  mutate(Code = sub("Name","",Codes)) %>%
  select(ID, Names, Codes, Code, Value) %>%
  as.data.frame()

结果

    ID  Names     Codes  Code Value
1 1110 Crop.. Code1Name Code1     0
2 1110 Crop.. Code2Name Code2     0
3 1110 Crop.. Code3Name Code3     0
4 1120 Anim.. Code1Name Code1     0
5 1120 Anim.. Code2Name Code2     0
6 1120 Anim.. Code3Name Code3     0
7 1131 Timb.. Code1Name Code1     0
8 1131 Timb.. Code2Name Code2     0
9 1131 Timb.. Code3Name Code3     0

PS: gather()函数已pivot_longer() ,请改用pivot_longer()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM