如何重塑数据帧并将多个值粘贴到 R 中稀疏矩阵的单个单元格中?

维沙哈德什穆克

我有一个如下所述的数据框。我想创建一个稀疏矩阵,其行名称和列名称是唯一的车站名称,并且在稀疏矩阵的单元格中,我想要该特定车站名称的所有列车号。这是整个数据的链接

Train.No. train.Name       isl.no. station.code     Station.Name
'00851'   BNC SUVIDHA SPL   1      BBS              BHUBANESWAR    
'00851'   BNC SUVIDHA SPL   2      BAM              BRAHMAPUR      
'00851'   BNC SUVIDHA SPL   3      VSKP             VISAKHAPATNAM  
'00851'   BNC SUVIDHA SPL   4      BZA              VIJAYAWADA JN  
'00851'   BNC SUVIDHA SPL   5      RU               RENIGUNTA JN   
'00851'   BNC SUVIDHA SPL   6      JTJ              JOLARPETTAI    
'00851'   BNC SUVIDHA SPL   7      BNC              BANGALORE CANT 
'00852'   BNC BBS SUVIDHA   1      BNC              BANGALORE CANT 
'00852'   BNC BBS SUVIDHA   2      JTJ              JOLARPETTAI    

我使用下面的代码获得了所需的输出,但是这个过程花费了太多时间,因为这不是一个维度为 4337*4337 的稀疏矩阵。

r1 <- rail

mat_n <- matrix(data = NA, nrow = length(unique(r1$Station.Name)), 
ncol = length(unique(r1$Station.Name)))
rownames(mat_n) <- unique(r1$Station.Name)
colnames(mat_n) <- unique(r1$Station.Name)

a1 <- unique(r1$Train.No.)

for(k in 1:length(a1)){
fd1 <- grep(a1[k], r1$Train.No.)
for(i in 1:nrow(mat_n)){
sta1 <- rownames(mat_n)[i]
for(j in 1:ncol(mat_n)){
  if(i != j){
    sta2 <- colnames(mat_n)[j]
    if(length(grep(sta1, r1$Station.Name[fd1[1]]))>0 & length(grep(sta2, r1$Station.Name[fd1[1]:fd1[length(fd1)]]))>0){
      mat_n[i,j] <-paste(mat_n[i,j], a1[k])}

  }
}
}
}

使用 reshape2、dplyr、tidyr 等软件包的替代方法是什么?我搜索了相同的内容,但没有得到任何给我所需的输出。这是我想要的所需输出的形式。

马特·朱维特

从您的初始数据帧开始r1,此 dplyr/tidyr 解决方案可能会为您提供所需的结果

library(dplyr)
library(tidyr)

r1 <- r1 %>% 
  arrange(Train.No., isl.no.) %>%
  group_by(Train.No.) %>%
  mutate(Start.Station = first(Station.Name)) %>%
  ungroup() %>% 
  mutate(rownum = row_number()) %>%
  spread(Station.Name, Train.No.) %>%
  select(-train.Name, -isl.no., -station.code, -rownum) %>%
  group_by(Start.Station) %>%
  summarise_each(funs(paste(na.omit(.), collapse = " ")))


row.names(r1) <- r1$Start.Station
r1$Start.Station <- NULL

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据单元格中的值数重塑R中的数据帧

VBA-如何从单个单元格复制数据并将其粘贴到合并的单元格中

如何将向量粘贴到R中非NA的数据框列的空单元格中?

R:如何根据单元格中的值将数据帧中的行拆分为多行?

如何获取多维R数组中单个单元格的dimnames?

如何在R中的热图单元格中显示数字单元格值

如何仅使用宏将单个值粘贴到过滤的单元格中?

复制数据并将其粘贴到R中

从 R 中的一组矩阵中有效地找到最小单元格值

如何在R中的列中修改单元格

确定单个单元格中两个矩阵的最大值

在r中的单个单元格中添加相隔的数字

如何使用R中的(单元格中的列名*编号)填充数据框中的每个单元格?

根据if语句在R中重复单元格值

用R中相邻单元格的值填充NA

R:基于给定值的表格中的颜色单元格

R,过滤数据框单元格列表中的元素

填写R中列的单元格数据

R:在单独的单元格中写入(向量)数据

如何循环遍历R中的csv单元格?

如何处理R markdown中的空白单元格?

如何在R中仅用空格(“”)替换单元格

如何替换r中的空单元格

如何在R中突出显示Excel单元格

如何用R中的NA替换空单元格?

如何更改R数据帧的每个单元格中的所有字符

围绕R改变矩阵中单元格的顺序

如何在R中缺少将一个单元格合并到一个单元格中的多个单元格(NULL)

在R中的单个单元格中转换列