我试图从数据帧创建一个身份矩阵.数据帧是这样的:


i<-c("South Korea", "South Korea", "France", "France","France")
j <-c("Rwanda", "France", "Rwanda", "South Korea","France")
distance <-c(10844.6822,9384,6003,9384,0)
dis_matrix<-data.frame(i,j,distance)

dis_matrix

1   South Korea     South Korea        0.0000
2   South Korea          Rwanda    10844.6822
3   South Korea          France     9384.1793
4        France          Rwanda     6003.3498
5        France     South Korea     9384.1793
6        France          France        0.0000

我正在try 创建一个如下所示的矩阵:

                South Korea           France         Rwanda     
South Korea               0        9384.1793     10844.6822
France            9384.1793                0      6003.3498
Rwanda           10844.6822        6003.3498              0

我已经try 过使用矩阵包中的SparseMatrix,如下所述(Create sparse matrix from data frame)

推荐答案

我们可以将前两列转换为factor,其中levels指定为两列中的unique个值,然后使用base R中的xtabs

un1 <- unlist(unique(dis_matrix[1:2]))
dis_matrix[1:2] <- lapply(dis_matrix[1:2], factor, levels = un1)
xtabs(distance ~ i + j, dis_matrix)

-输出

           j
i             South Korea   France   Rwanda
  South Korea        0.00  9384.00 10844.68
  France          9384.00     0.00  6003.00
  Rwanda             0.00     0.00     0.00

R相关问答推荐

手工PCA上的载体与输出双图不匹配

R:如何自动化变量创建过程,其中我需要基于ifelse()为现有变量的每个级别创建一个单独的变量

将带有范围的字符串转换为R中的数字载体

如何在四进制仪表板值框中显示值(使用shiny 的服务器计算)

更改Heatmap Annotation对象的名称

如果列中存在相同的字符串,则对行值进行总和

基于不同组的列的相关性

如何将旋转后的NetCDF转换回正常的纬度/经度网格,并使用R?

如何改变时间图R中的悬停信息?

在连续尺度上转置标签[瀑布图,R]

根据元素和前一个值之间的差值过滤矩阵的元素

R spatstat Minkowski Sum()返回多个边界

使用for循环和粘贴创建多个变量

有没有办法使用ggText,<;Sub>;&;<;sup>;将上标和下标添加到同一元素?

从非重叠(非滚动)周期中的最新数据向后开窗并在周期内计数

如何根据R中其他变量的类别汇总值?

使用ifElse语句在ggploy中设置aes y值

有毒元素与表观遗传年龄的回归模型

如何从嵌套数据中自动创建命名对象?在R中

分隔日期格式为2020年7月1日