【问题标题】:R gsub column names in all data frames within a list列表中所有数据框中的 R gsub 列名
【发布时间】:2016-09-27 04:26:33
【问题描述】:

我有一个包含列名的数据框列表,我想替换一些字符串,但我做不到。

list:
[1]
cpg value.TCGA.06.5415.01A     value.TCGA.02.0003.01A   value.TCGA.16.1062.01A
cg02726808  0.934641544 NA  NA
cg04243127  0.8828403   NA  NA
[2]
cpg value.TCGA.QH.A6CV.01A  value.TCGA.E1.A7Z4.01A  value.TCGA.E1.5303.01A
 cg02726808 0.938556343 0.92163563  0.959269597
 cg04243127 0.886928811 0.842963126 0.937700666
[N]
.....

Desired output:
    list:           
[1]         
cpg 06.5415.01A 02.0003.01A 16.1062.01A
cg02726808  0.934641544 NA  NA
cg04243127  0.8828403   NA  NA
[2]         
cpg QH.A6CV.01A E1.A7Z4.01A E1.5303.01A
cg02726808  0.938556343 0.92163563  0.959269597
cg04243127  0.886928811 0.842963126 0.937700666
[N]         
.....

我试着写了以下内容:

lapply(lst, function(x) { gsub("value.TCGA.", "", colnames(lst[[x]]))})

R Studio 中的错误:

Error in llis1[[xy]] : invalid subscript type 'list'
Called from: is.data.frame(x)
Browse[1]> 

而且我不明白它是关于什么的。感谢您的帮助。

【问题讨论】:

    标签: r list lapply gsub


    【解决方案1】:

    我们可以使用setNames 将列名替换为sub 中的新列名。

    lapply(lst, function(x) setNames(x, sub("value.TCGA.", "", names(x))))
    

    或者另一个选项是substring,如果'value.TCGA'。除第一个列名外,所有列名中的位置都相同。

    lapply(lst, function(x) setNames(x, c("cpg", substring(names(x)[-1], 12)))
    

    【讨论】:

      【解决方案2】:

      试试

      lapply(lst, function(x) {
        colnames(x) <- gsub("value.TCGA.", "", colnames(x))
        return(x)
      })
      

      x 在这种情况下是lst 的元素,而不是lst 元素的索引。所以在你的代码中,你正在尝试做lst[[ lst[[1]] ]]。从这里开始,错误消息应该是有意义的。

      【讨论】:

        猜你喜欢
        • 2020-07-08
        • 2020-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-07
        • 2015-12-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多