r - 是否有将数据更改为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)
我想制作新的数据框,如屏幕截图所示。
请给我一些建议:)
解决方案
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 ]
推荐阅读
- java - 这是使用 BigDecimals 舍入的正确行为吗?
- r - 如何按 ID 分组并按另一列扩展数据框
- azure - Azure AD SP create-for-rbac 的等效 terraform 代码是什么?
- r - 为全球环境中的多个大型数据框删除包含特定 NA 列的行
- c# - 我可以使图片与数组中的整数相对应吗?
- powershell - 在 PowerShell v3 中,为什么将表达式的结果存储在不同的对象中?
- r - R中lme4中glmer中的数据大小问题:导致收敛问题的数据集大小
- python - 根据行号删除数据框的行
- http - 如何允许 Expo 发送和接收本地主机?
- r - 如何为 R 中的两个列表运行嵌套 for 循环?