我是R的新手,但是已经开发SAS程序(和VBA)已有几年了。好吧,我有4行R代码(脚本?),我想重复44次。对于22个不同的火车站中的每个火车站,分别进行两次,以指示火车是驶入还是驶出。四行代码是:
dataGL_FLIin <- subset( dataGL_all, select = c(Tidsinterval, Dag, M.ned, Ugenr.,Kode, Ugedag, FLIin))
names(dataGL_FLIin)[names(dataGL_FLIin)=='FLIin'] <- 'GL_Antal'
dataGL_FLIin$DIR<-"IN"
dataGL_FLIin$STATION<-"FLI
为了避免重复4行44次,我需要2个“宏变量”(是的,我知道,这仅是SAS的东西,对不起)。一个“宏变量”指示火车站,一个“指示方向”。在火车站上面的例子是FLI其方向是在。下同4线被证明为火车站FBE,此时在出-going方向。
dataGL_FBEout <- subset( dataGL_all, select = c(Tidsinterval, Dag, M.ned, Ugenr.,Kode, Ugedag, FBEout))
names(dataGL_FBEout)[names(dataGL_FBEout)=='FBEout'] <- 'GL_Antal'
dataGL_FBEout$DIR<-"OUT"
dataGL_FBEout$STATION<-"FBE"
我看过很多地方,并尝试过R函数和R列表的许多组合,但是我无法使其正常工作。很可能我弄错了。如果问题(太)愚蠢,我事先表示歉意,但是,对于此事的任何帮助,我们将不胜感激。
请 请注意,最后我要创建44个不同的数据帧:1)dataGL_FLIin 2)dataGL_FBEout 3)等等。
已添加:2 STATION 2 Directions我的问题示例
'The one data frame I have'
Date<-c("01-01-15 04:00","01-01-15 04:20","01-01-15 04:40")
FLIin<-c(96,39,72)
FLIout<-c(173,147,103)
FBEin<-c(96,116,166)
FBEout<-c(32,53,120)
dataGL_all<-data.frame(Date, FLIin, FLIout, FBEin, FBEout)
'The four data frames I would like'
GL_antal<-c(96,39,72)
Station<-("FLI")
Dir<-("IN")
dataGL_FLIin<-data.frame(Date, Station, Dir, GL_antal)
GL_antal<-c(173,147,103)
Station<-("FLI")
Dir<-("OUT")
dataGL_FLIout<-data.frame(Date, Station, Dir, GL_antal)
GL_antal<-c(96,116,166)
Station<-("FBE")
Dir<-("IN")
dataGL_FBEin<-data.frame(Date, Station, Dir, GL_antal)
GL_antal<-c(32,53,120)
Station<-("FBE")
Dir<-("OUT")
dataGL_FBEout<-data.frame(Date, Station, Dir, GL_antal)
谢谢,Lars
通过您的示例,现在可以更清楚地了解所需内容,我将再次尝试。我使用dataGL_all
您的问题和定义中所定义的
stations <- rep(c("FLI","FBE"),each=2)
directions <- rep(c("in","out"),times=length(stations)/2)
您还可以从数据框中提取站点和方向。以您的示例为例,以下方法将起作用
stations <- substr(names(dataGL_all)[-1],1,3)
directions <- substr(names(dataGL_all)[-1],4,6)
然后,定义将对数据起作用的函数:
dataGLfun <- function(station,direction) {
name <- paste0(station,direction)
dataGL <- dataGL_all[,c("Date", name)]
names(dataGL)[names(dataGL)==name] <- 'GL_Antal'
dataGL$DIR<-direction
dataGL$STATION<-station
dataGL
}
现在,我将此功能应用于两个方向的所有电台:
dataGL <- mapply(dataGLfun,stations,directions,SIMPLIFY=FALSE)
names(dataGL) <- paste0(stations,directions)
现在,您可以获取测站和方向每种组合的数据帧。例如,问题中的两个示例与dataGL$FLIin
和一起使用dataGL$FBEout
。之所以用a$
代替a_
是因为我实际上没有为每个数据帧创建一个单独的变量。相反,我创建了一个列表,其中列表的每个元素都是数据框之一。这样做的好处是,以后对所有数据帧执行操作会更容易。对于您的解决方案,您将必须键入所有各种变量名,但是如果数据框在列表中,则可以使用诸如之类的函数来使用它们lapply
。
如果您希望拥有许多不同的变量,则可以执行以下操作
for (i in seq_along(stations)) {
assign(paste0("dataGL_",stations[i],directions[i]), dataGLfun(stations[i],directions[i]))
}
但是,我认为这不是您应该在R中解决此问题的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句