簡體   English   中英

在R中以動態方式重命名許多數據框的許多列

[英]renaming many columns of many dataframe in a dynamic way in R

我有一個腳本,可以從互聯網上抓取數據后生成多個數據幀

library("rvest")
urllist <- c("https://en.wikipedia.org/wiki/Jawaharlal_Nehru",
         "https://en.wikipedia.org/wiki/Indira_Gandhi")
for(i in 1:length(urllist))
{ mydata <- urllist[i]
  print(url)
  mydata<- url %>%
    html() %>%
    html_nodes(xpath='//*[@id="mw-content-text"]/table[1]') %>%
    html_table()
    X <- mydata[[1]]
    assign(paste("df", i, sep = '_'), X)
}

因此它會創建df_1,df_2等。

下載后,所有此數據框都有2列。第一列名稱是該人的姓名,第二列名稱是NA。

如何動態地將所有這些數據框列名重命名為“ ID”,將第一列名重命名為“ ID”,將第二列名重命名為人名? 我下面的嘗試失敗了。這正在更改那些字符串...它不會影響我的數據幀。

for(i in 1:length(urllist))
{ asign(colnames(get(paste("df", i, sep = '_')))[1],"ID")
  assign(colnames(get(paste("df", i, sep = '_')))[2],colnames(get(paste("df", i, sep = '_')))[1])
  }

然后,我的最終目標是根據“ ID”列將所有這些數據框合並到一個數據框中。 怎么可能呢?

這樣解決:

   for (i in (1:length(urllist))) 
{
  df.tmp <- get(paste("df", i, sep = '_'))
  names(df.tmp) <- c("ID",colnames(get(paste("df", i, sep = '_')))[1] ) 
  assign(paste("df",i,sep='_'), df.tmp)
}

對於合並我已經解決了這種方式:

#making the list without the 1st df
alldflist = lapply(ls(pattern = "df_[2]"), get)
#merge multiple data frames by ID
#note at first taking the 1st df
mergedf<-df_1
for ( .df in alldflist ) 
   {
  mergedf <-merge(mergedf,.df,by.x="ID", by.y="ID",all=T)
}

有用。 但是任何人都可以為這種動態數據框名稱建議一個更好的方法,並將其合並為一個數據框

在這種情況下,使用Roman在他的評論中指出的列表絕對可以解決問題,但是如果您已經在循環瀏覽列表,為什么不使用初始的for循環來完成它……像這樣:

colnames(X) <- c("ID", colnames(X)[1])

這是假設您希望第一列名稱為第二列名稱,基於第二個循環的情況就是這樣。

暫無
暫無

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

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