我已经从网上刮数据后,生成多个dataframes脚本重命名许多数据帧的多列以动态的方式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列。第1列名称是该人员名称,第2列名称是NA。
如何将所有这些数据框列名重命名为第一列名称作为“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)
}
它的工作原理。但任何人都可以请建议一个更好的方式来为这个动态数据框的名称,并合并成一个单一的数据框
您不能将data.frames存储在列表中,并使用为此设计的R方法来处理它们吗? –
解决最后使用df.tmp – pmr