R的全新,所以我不确定如何提出这个问题。
我正在加载大约50个html表,试图将它们放入一个数据框或数据表中。每张表代表美国50个州每个州5年的单次测量值。每个州都有一行,包含以下列:
colnames(df) <- c("State", "2009", "2010", "2011", "2012", "2013")
我目前正在将每个表加载到自己的数据框中,因此每个度量都有一个数据框。我希望将这些全部合并到一个数据框中,每个州/年有一行,另外还有50列(我的每个测量都有一列)。例如:
colnames(df) <- c("State", "Year", "Measure1", "Measure2",...,"Measure50")
为了实际学习这门语言,除了手动将每列逐个手动复制到数据帧的一行(50x5年)之外,我确信还有其他方法可以做到这一点。
我该如何处理这个问题?我甚至不确定我应该查找哪些概念(合并,融化,重塑,还有其他什么?)。我应该使用data.table而不是data.frame吗?
使用解决方案进行修改:
我能够通过首先构建一个每列州/年组合的一行的2列数据表回到起点来解决这个问题。然后当我加载50个数据集中的每一个时,我执行以下操作:
dt <- melt(dt, id.vars=c("State"))
colnames(dt) <- c("State", "Year", measureName)
setkeyv(dt, c("State", "Year"))
destination <- merge(destination, dt)
本质上,我在加载每个数据集时转换它,给我一个与我创建的初始数据表相同的布局,然后将两者合并在一起。
答案 0 :(得分:1)
Not tested:
#I assume you have tables in data frame, called this as DF1..DF50.
#Reshape each data
#list of all raw dataframes
DF<-as.list(paste0("DF",1:50))
#Reshape the data
library(tidyr) # need for gather function
RDF<-do.call(cbind,lapply(1:50, function(i) {
gather(get(DF[[i]]),State, Measure, 2001:2005)}))
#In RDF, we have repeated columns of State from each dataframe. We will keep only the first one
RDF[grep("State",names(RDF)[-1],value=TRUE)]<-NULL
#In RDF, we have repeated columns of same variable Measure, we will rename it as Measure1 ..Measure 50
names(RDF)[2:ncol(RDF)]<-paste0("Measures",1:50)