簡體   English   中英

修改列表中數據框的列名

[英]Modifying column names of dataframes within a list

像這樣處理數據框列表

library(data.table)
IDn = c("ChrM", "ChrM" ,"ChrM" ,"ChrM" ,"ChrM")   
posn = c(2,5,7,8,9)
met = c(2,0,4,1,0)
nmet = c(2,1,0,2,0)
bd = c(3,3,0,8,10)
dfp = data.frame(IDn,posn,met,nmet,bd)
  IDn     posn met  nmet bd
1 ChrM    2    2    2    3
2 ChrM    5    0    1    3
3 ChrM    7    4    0    0
4 ChrM    8    1    2    8
5 ChrM    9    0    0    10
L1<-list(d1=dfp, d2=dfp, d3=dfp)
    $d1
   IDn posn met nmet bd
1 ChrM    2   2    2  3
2 ChrM    5   0    1  3
3 ChrM    7   4    0  0
4 ChrM    8   1    2  8
5 ChrM    9   0    0 10

$d2
   IDn posn met nmet bd
1 ChrM    2   2    2  3
2 ChrM    5   0    1  3
3 ChrM    7   4    0  0
4 ChrM    8   1    2  8
5 ChrM    9   0    0 10

$d3
   IDn posn met nmet bd
1 ChrM    2   2    2  3
2 ChrM    5   0    1  3
3 ChrM    7   4    0  0
4 ChrM    8   1    2  8
5 ChrM    9   0    0 10

例如,我想將bd列的名稱更改為bd和df的名稱;

我試着使用lapplypaste0("bd",names(l1)) ,但是當我每一個df只需要一個名字時,這個名字加起來就有3個名字。

我們可以使用Map來包裝您在問題中提到的邏輯:

Map(function(df,i) {names(df)[5] <- paste0("bd", names(L1)[i]);df}, L1, 1:length(L1))
# $d1
#    IDn posn met nmet bdd1
# 1 ChrM    2   2    2    3
# 2 ChrM    5   0    1    3
# 3 ChrM    7   4    0    0
# 4 ChrM    8   1    2    8
# 5 ChrM    9   0    0   10
# 
# $d2
#    IDn posn met nmet bdd2
# 1 ChrM    2   2    2    3
# 2 ChrM    5   0    1    3
# 3 ChrM    7   4    0    0
# 4 ChrM    8   1    2    8
# 5 ChrM    9   0    0   10
# 
# $d3
#    IDn posn met nmet bdd3
# 1 ChrM    2   2    2    3
# 2 ChrM    5   0    1    3
# 3 ChrM    7   4    0    0
# 4 ChrM    8   1    2    8

對於data.table您可以嘗試:

for(i in 1:length(L1)) setnames(L1[[i]], "bd", paste0("bd", names(L1)[i]))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM