【问题标题】:Change column in data frames in list更改列表中数据框中的列
【发布时间】:2016-01-12 12:54:14
【问题描述】:

我有一个包含 78 个数据帧 (list_of_df) 的列表,它们都具有相同的第一列和所有带注释的集成脚本 id:s,但是它们具有扩展名“.1”,即(“ENST00000448914.1”和等等),我想删除它以便将它们与纯 ENST-ID 匹配。

我尝试过使用 lapply,里面有一个 sapply,如下所示:

lapply(list_of_df, function(x)  
                 cbind(x,sapply(x$target_id, function(y) unlist(strsplit(y,split=".",fixed=T))[1])) ) 

但这需要很长时间,有没有人知道如何做到这一点?

【问题讨论】:

    标签: r list dataframe lapply


    【解决方案1】:

    我们循环遍历data.frameslist,并使用sub 删除. 后跟第一列中的数字。

    lapply(list_of_df, function(x) {
              x[,1] <-sub('\\.\\d+', '', x[,1])
               x })
    
    #[[1]]
    #   target_id value
    #1 ENST000049    39
    #2 ENST010393    42
    
    #[[2]]
    #   target_id value
    #1 ENST123434   423
    #2  ENST00838    23
    

    注意:即使 OP 的第一列是 factor,这也应该有效。

    数据

    list_of_df <- list(data.frame(target_id= c("ENST000049.1", 
       "ENST010393.14"), value= c(39, 42), stringsAsFactors=FALSE), 
      data.frame(target_id=c("ENST123434.42", "ENST00838.22"), 
       value= c(423, 23), stringsAsFactors=FALSE))
    

    【讨论】:

    • @user3346285 关于akrun提供的示例数据,他的功能效果更好,所以你应该accept his answerimo
    【解决方案2】:

    您可以将代码简化为:

    lapply(list_of_df, function(x) x[,1] = unlist(strsplit(x[,1], split=".", fixed=TRUE))[1])
    

    如果您的列有 factor 作为类,您可以将 x[,1] 包装在 as.character 中:

    lapply(list_of_df, function(x) x[,1] = unlist(strsplit(as.character(x[,1]), split=".", fixed=TRUE))[1])
    

    您也可以使用stringi 包:

    library(stringi)
    lapply(list_of_df, function(x) x[,1] = stri_split_fixed(x[,1], ".", n=1, tokens_only=TRUE))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-01
      • 2021-01-21
      • 2015-04-23
      • 1970-01-01
      • 2013-02-06
      • 2018-11-18
      • 2017-08-14
      相关资源
      最近更新 更多