r - 在长格式数据框中使用没有列名的熔体将宽格式转换为长格式
问题描述
我希望将数据框转换为像这样的长格式
这是我使用的代码
long_ex <- melt(wide_ex, id.vars = 5, na.rm=TRUE) #wide_ex is wide format dataframe
但是,我的最终结果看起来像这样
有没有办法在不提取列名的情况下使用融化?如果 melt 不适合这项工作,将很乐意接受替代功能
编辑:来自 dput 的数据输出
structure(list(ï..Column1 = c(NA, NA, NA, NA), Column2 = c(NA,
NA, NA, NA), Column3 = c(NA, NA, NA, NA), Column4 = c(NA, NA,
NA, NA), Column5 = structure(c(2L, 1L, 4L, 3L), .Label = c("Eric ",
"Jim", "Matt", "Tim"), class = "factor"), Column6 = c(NA, NA,
NA, NA), Column7 = structure(c(1L, 3L, 2L, 3L), .Label = c("Eric",
"Erica", "Mary "), class = "factor"), Column8 = structure(c(3L,
2L, 1L, 3L), .Label = c("Beth", "Loranda", "Matt"), class = "factor"),
Column9 = structure(c(2L, 3L, 1L, 3L), .Label = c("Courtney ",
"Heather ", "Patrick"), class = "factor"), Column10 = structure(4:1, .Label = c("Beth",
"Heather", "John", "Loranda "), class = "factor"), Column11 = c(NA,
NA, NA, NA), Column12 = c(NA, NA, NA, NA), Column13 = c(NA,
NA, NA, NA), Column14 = c(NA, NA, NA, NA), Column15 = c(NA,
NA, NA, NA)), class = "data.frame", row.names = c(NA, -4L
))
解决方案
如果你想要一个基本的 R 解决方案:
data.frame(name_1 = rep(as.character(wide_ex$Column5), each=nrow(wide_ex)),
name_2 = as.vector(t(wide_ex[, c("Column7", "Column8", "Column9", "Column10")])))
我仍然认为最简洁的方法是与 data.table 融合:
library(data.table)
setDT(wide_ex)
melt(wide_ex, id.vars = c("Column5"), na.rm=TRUE)[,variable := NULL][]
如果速度受到关注,它还将比 reshape2 提供相当大的速度改进。
(补充说明)... 附加的有什么用[]
?
A)使用额外的 [] indata.table
被称为链接。它允许您对前面的 [] 执行更多操作。
正如您最初指出的那样,melt 的输出会产生一个不需要的列 ( variable
)。variable := NULL
删除它。这与执行以下操作基本相同(关于您的原始问题):
long_ex <- melt(wide_ex, id.vars = 5, na.rm=TRUE)
long_ex$variable <- NULL
但是,使用是:=
通过引用来实现的(并且在同一行上)。
链接对于保持代码简洁明了非常有用。假设您想按第一列排序输出(正如您在原始问题中所指出的那样)。你可以这样做:
熔化(wide_ex,id.vars = c(“Column5”),na.rm=TRUE)[,变量:= NULL][order(Column5)][]
data.table 确实是一个了不起的包(尤其是在处理大中型数据时)。如果您有兴趣,我建议您阅读和了解更多信息:https ://github.com/Rdatatable/data.table/wiki
推荐阅读
- azure - Azure Web App 是否需要防火墙?
- powerbi - Power BI 查询连接到使用 HMAC 身份验证的 API
- angular - Angular 在应该只更新一个字段时同时更新所有字段
- azure - 检查应用服务从 Azure 容器存储库中提取映像的次数
- c++ - 关于c++函数中指针赋值的一个简单问题
- google-apps-script - 如何最好在不创建市场插件的情况下在域外共享谷歌网络应用程序
- sql - 嵌套分组查询的正确语法是什么?
- javascript - 使用 json 数据创建 html 表
- iis - IIS 和按目录压缩
- azure - 如何在 azure devops YAML 管道中将单个代理用于多个作业/阶段