r - 试图在 R 中转置数据
问题描述
我希望在 R 中转置数据。我有以下数据框。
我需要转置它,以便列行如下所示:
依此类推,因此该表将有 90 行(每个源目标 9 行)
最好和最快的方法是什么?
解决方案
看来您有一个对称矩阵。你可以dist2df
从我的 SOfun 包中使用。
以下是一些示例数据:
df <- structure(list(City = structure(c(2L, 5L, 4L, 3L, 1L), .Label = c("CFMG",
"CONT", "DILG", "DMNR", "INTG"), class = "factor"), CONT = c(0,
0.566595445231594, 0.576844266554399, 0.493804001521439, 0.431543849302017
), INTG = c(0.566595445231594, 0, 0.0176923632394502, 0.0642444500652801,
0.0929571208871039), DMNR = c(0.576844266554399, 0.0176923632394502,
0, 0.0815745238751543, 0.093320922043577), DILG = c(0.493804001521439,
0.0642444500652801, 0.0815745238751543, 0, 0.0206006197275541
), CFMG = c(0.431543849302017, 0.0929571208871039, 0.093320922043577,
0.0206006197275541, 0)), row.names = c(NA, 5L), class = "data.frame")
df
# City CONT INTG DMNR DILG CFMG
# 1 CONT 0.0000000 0.56659545 0.57684427 0.49380400 0.43154385
# 2 INTG 0.5665954 0.00000000 0.01769236 0.06424445 0.09295712
# 3 DMNR 0.5768443 0.01769236 0.00000000 0.08157452 0.09332092
# 4 DILG 0.4938040 0.06424445 0.08157452 0.00000000 0.02060062
# 5 CFMG 0.4315438 0.09295712 0.09332092 0.02060062 0.00000000
该dist2df
函数需要一个dist
对象,因此as.dist
在data.frame
删除第一列之后使用:
library(SOfun)
dist2df(as.dist(df[-1]))
# row col value
# 1 INTG CONT 0.56659545
# 2 DMNR CONT 0.57684427
# 3 DILG CONT 0.49380400
# 4 CFMG CONT 0.43154385
# 5 DMNR INTG 0.01769236
# 6 DILG INTG 0.06424445
# 7 CFMG INTG 0.09295712
# 8 DILG DMNR 0.08157452
# 9 CFMG DMNR 0.09332092
# 10 CFMG DILG 0.02060062
您也可以melt
通过以下方式使用。这种方法会保留对角线,而dist2df
不会。
library(data.table)
df1 <- df # making a copy since we're destructively editing the data
df1[cbind(FALSE, upper.tri(df[-1]))] <- NA
melt(as.data.table(df1), "City", na.rm = TRUE)
# City variable value
# 1: CONT CONT 0.00000000
# 2: INTG CONT 0.56659545
# 3: DMNR CONT 0.57684427
# 4: DILG CONT 0.49380400
# 5: CFMG CONT 0.43154385
# 6: INTG INTG 0.00000000
# 7: DMNR INTG 0.01769236
# 8: DILG INTG 0.06424445
# 9: CFMG INTG 0.09295712
# 10: DMNR DMNR 0.00000000
# 11: DILG DMNR 0.08157452
# 12: CFMG DMNR 0.09332092
# 13: DILG DILG 0.00000000
# 14: CFMG DILG 0.02060062
# 15: CFMG CFMG 0.00000000
推荐阅读
- java - 使用 Jackson 从单个文件中读取多个 JSON 对象
- vue.js - 将数据从模板传递到组件
- c++ - 自动完成在 git 存储库中的 Visual Studio 项目中不起作用
- android - 将 android studio 构建输出窗口文本更改为英文
- mysql - 选择每个对话的第一行
- javascript - Leaflet JS中的多个圆圈
- java - 我不理解java中的通配符
- python - TypeError: 不支持的操作数类型 /: 'Dimension' 和 'int'
- c - 如何在 flatbuffers 模式文件中声明指针类型?
- dialogflow-es - 尝试发布 alpha 时未找到对 google 测试指令的操作