2016-09-27 3 views
1

У меня есть список фреймов данных с именами столбцов, которые я хочу заменить некоторыми строками, но я не могу сделать это правильно.Названия столбцов R gsub во всех кадрах данных в списке

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 Студия:

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

И я не понимаю, что это о. Спасибо за вашу помощь.

ответ

2

Мы можем использовать 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]] ]]. Отсюда сообщение об ошибке должно иметь смысл.

Смежные вопросы