[英]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.