首页 > 解决方案 > 是否有将数据更改为R中的列的功能

问题描述

我想知道是否有将数据帧数据更改为列的函数或代码。

这是我制作的数据框。

number <- c("no.1","no.2","no.3","no.4","no.5","no.6","no.7","no.8","no.9","no.10")

tp1 <- c("car","car","bicycle","car","walk","walk","bus","subway","subway","subway")

tp2 <- c("bicycle",NA,"bus",NA,"subway",NA,"walk",NA,NA,NA)

tp3 <- c("walk",NA,"subway",NA,NA,"bus",NA,NA,NA,NA)

tp4 <- c("bus","walk",NA,NA,NA,NA,NA,NA,NA,NA)

tp5 <- c("subway",NA,NA,NA,NA,NA,NA,NA,NA,NA)

transport <- data.frame(number,tp1,tp2,tp3,tp4,tp5)

我想制作新的数据框,如屏幕截图所示。

请给我一些建议:)

我想做这样的数据框

标签: rdataframedplyr

解决方案


error :Values are not uniquely identified在 data.table 中不是问题。但是,我想这已经用tidyr 1.1.0解决了。

无论如何,这是 data.table 解决方案:


library(data.table)

transport <- as.data.table(transport)

transport_long <- melt(transport, 
     id = "number", 
     measure = patterns("tp"), 
var.name ="tp", 
value.name = "transport_mode", 
na.rm = TRUE)

transport_long <- [, c("transport_mode", "yes") := .(paste0("use", transport_mode), "yes")]

dcast(transport_long[, -2], number~transport_mode, drop = FALSE, value.var = "yes")


number usebicycle usebus usecar usesubway usewalk
 1:   no.1        yes    yes    yes       yes     yes
 2:  no.10       <NA>   <NA>   <NA>       yes    <NA>
 3:   no.2       <NA>   <NA>    yes      <NA>     yes
 4:   no.3        yes    yes   <NA>       yes    <NA>
 5:   no.4       <NA>   <NA>    yes      <NA>    <NA>
 6:   no.5       <NA>   <NA>   <NA>       yes     yes
 7:   no.6       <NA>    yes   <NA>      <NA>     yes
 8:   no.7       <NA>    yes   <NA>      <NA>     yes
 [ reached getOption("max.print") -- omitted 2 rows ]


  

推荐阅读