lengshizai 2023-03-17 23:48 采纳率: 43.9%
浏览 90
已结题

TCGA临床数据cbind:see arg 36

合并TCGA临床数据出现不同案例 列数不同 而难以cbind

library("XML")
library("methods")
dir="all/"      
all_fiels=list.files(path = dir ,pattern='*.xml$',recursive=T)##导入文件
cl = lapply(all_fiels, function(x){
  result <- xmlParse(file = file.path(dir,x)) 
  rootnode <- xmlRoot(result)  
  xmldataframe <- xmlToDataFrame( rootnode[2] ) 
  return(t(xmldataframe)) })
clinical <- t(do.call(cbind,cl))
write.table(clinical,file="clinical.txt",sep="\t",quote=F,row.names = F)##建议保存一下 一边后续使用

错误内容是:第10行代码:

Error in (function (..., deparse.level = 1)  : 
  number of rows of matrices must match (see arg 36)

请教该如何解决?
数据附上:[]
(--来自百度网盘超级会员V6的分享
hi,这是我用百度网盘分享的内容~复制这段内容打开「百度网盘」APP即可获取 
链接:https://pan.baidu.com/s/1Bx18Syf7_ngZRI2nSbGgUA 
提取码:51e6)

初步构思:来自不同病重个案的临床数据列数不同因而不能cbind
解决方法:1.分开处理(但是不知道那些是一样的 那些是不一样的
解决方法:2.请各位指点一下如何修改现有代码实现目的。

  • 写回答

5条回答 默认 最新

  • 「已注销」 2023-03-17 23:56
    关注

    参考GPT和自己的思路:这个错误提示说明你尝试使用cbind函数合并数据时,发现有些矩阵的行数不一致,无法进行合并。根据你的代码,我猜测这个问题可能是由于不同的xml文件中,数据的列数不同所导致的。

    为了解决这个问题,你可以尝试以下几种方法:

    1 对于不同的xml文件,手动添加缺失的列,并将缺失列填充为NA,确保每个矩阵的列数相同。具体来说,你可以先获取所有xml文件中出现过的列名,然后将这些列名添加到每个矩阵中,最后使用cbind函数进行合并。

    2 如果你只需要合并每个xml文件中相同的列,而对于不同的列则不需要合并,那么可以使用merge函数进行合并。merge函数可以根据指定的列将多个数据框合并为一个数据框,合并时只保留指定的列,其它列将被删除。你可以先将每个xml文件转换为数据框,然后使用merge函数进行合并。

    下面是示例代码,供你参考:

    方法一:

    library("XML")
    library("methods")
    dir="all/"      
    all_fiels=list.files(path = dir ,pattern='*.xml$',recursive=T)##导入文件
    all_cols <- character(0) # 存储所有列名
    cl <- lapply(all_fiels, function(x){
      result <- xmlParse(file = file.path(dir,x)) 
      rootnode <- xmlRoot(result)  
      xmldataframe <- xmlToDataFrame(rootnode[2])
      # 将每个数据框的列名存储到all_cols中
      all_cols <<- unique(c(all_cols, names(xmldataframe)))
      # 添加缺失的列
      xmldataframe[setdiff(all_cols, names(xmldataframe))] <- NA
      return(t(xmldataframe)) 
    })
    clinical <- t(do.call(cbind,cl))
    write.table(clinical,file="clinical.txt",sep="\t",quote=F,row.names = F)
    

    方法二:

    library("XML")
    library("methods")
    dir="all/"      
    all_fiels=list.files(path = dir ,pattern='*.xml$',recursive=T)##导入文件
    cl <- lapply(all_fiels, function(x){
      result <- xmlParse(file = file.path(dir,x)) 
      rootnode <- xmlRoot(result)  
      xmldataframe <- xmlToDataFrame(rootnode[2])
      return(xmldataframe) 
    })
    # 根据SampleID列合并数据
    clinical <- Reduce(function(x, y) merge(x, y, by = "SampleID"), cl)
    write.table(clinical,file="clinical.txt",sep="\t",quote=F,row.names = F)
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 修改了问题 3月17日
  • 创建了问题 3月17日

悬赏问题

  • ¥15 广告联盟的兜底广告是什么意思
  • ¥15 如何证明高斯噪声的包络公式
  • ¥150 寻找王者荣耀开发作者,合作或者解答
  • ¥15 乳腺癌数据集 相关矩阵 特征选择
  • ¥15 我的游戏账号被盗取,请问我该怎么做
  • ¥15 通关usb3.0.push文件,导致usb频繁断连
  • ¥15 有没有能解决微信公众号,只能实时拍照,没有选择相册上传功能,我不懂任何技术,,有没有给我发个软件就能搞定的方法
  • ¥15 Pythontxt文本可视化
  • ¥15 如何基于Ryu环境下使用scapy包进行数据包构造
  • ¥15 springboot国际化