R-用户, 我有这个数据框:
head(M2006)
X.ID_punto MM.GG.AA Rad_SWD
2945377 1 0001-01-06 19.918
2945378 2 0001-01-06 19.911
2945379 1 0001-02-06 19.903
2945380 2 0001-02-06 19.893
2945381 1 0001-03-06 19.875
2945382 2 0001-03-06 19.858
我需要做的是为每个日期获取不同的子集(MM.GG.AA):
subset(M2006, M2006$MM.GG.AA=="0001-10-06" )
或换句话说,每个站点的不同子集(X.ID_punto):
subset(M2006, M2006$X.ID_punto==1)
是否可以在网站(X.ID_punto)或日期(MM.GG.AA)上循环播放? 我试过这样的方式:
output<- data.frame(ID=rep(1:365))
for (p in as.factor(M2006[,1])) {
sub<- subset(M2006, M2006$X.ID_punto==p )
output[,p] <- sub$Rad_SWD
}
代码运行,但没有循环每个ID。 如果我不能循环,我必须写下子集(M2006,M2006 $ X.ID_punto == xxx)一千次...... 先感谢您! FRA
答案 0 :(得分:1)
我认为,根据您对输入和所需输出的描述,您只需使用reshape
包和cast
函数即可实现这一点:
require(reshape)
cast( M2006 , MM.GG.AA ~ X.ID_punto , value = .(Rad_SWD) )
# MM.GG.AA 1 2
#1 0001-01-06 19.918 19.911
#2 0001-02-06 19.903 19.893
#3 0001-03-06 19.875 19.858
它肯定比使用循环更快(它不会是绝对最快的解决方案,但我想象的是<1-2秒)。
答案 1 :(得分:0)
我自己找到了一个可能的解决方案。 我不会取消我的问题,也许有人会发现它有用。
#first of all, since I have 1008 sites (X.ID_punto)
#I created a list of my sites
list<- rep(1:1008)
#then, create a dataframe where I'll store my subsets.
#Every subset will be a column of 365 observations
output<- data.frame(site1=rep(1:365))
#loop the subset function on list of 1008 sites
for (p in 1:length(list)) {
print(p) #just to see if loop run
sub<- subset(M2006, M2006$X.ID_punto==p )
output[,p] <- sub$Rad_SWD #add the subset, as a column, to output dataframe
}
write.csv(uscita, "output.csv")#save the resulted data frame