R:避免在脚本中使用R子集重复代码行

拉尔斯·古斯塔夫森

我是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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

避免在JavaScript中使用重复代码?

来自分类Dev

子集化时避免使用R简化数组

来自分类Dev

在R中使用for函数进行子集

来自分类Dev

在R中使用一个变量创建“重复”行

来自分类Dev

R:避免重复$

来自分类Dev

避免使用Async重复代码

来自分类Dev

使用seq子集r中的奇数行

来自分类Dev

使用seq子集r中的奇数行

来自分类Dev

如何避免在R中使用嵌套的lapply?

来自分类Dev

在R中子集行

来自分类Dev

多次重复R脚本

来自分类Dev

R barplot:在names.arg中使用名称的子集

来自分类Dev

在R中使用合并定义data.table的子集

来自分类Dev

在R中使用grep和子集的多重过滤

来自分类Dev

如何在R中使用“字符”对象调用列表子集?

来自分类Dev

在R中使用grep和子集的多重过滤

来自分类Dev

在 r 中使用 if....else 语句进行子集化

来自分类Dev

在 R 中使用特定值进行子集化的问题

来自分类Dev

使用R Studio的子集

来自分类Dev

使用R Studio的子集

来自分类Dev

子集df并删除子集R的行

来自分类Dev

是否可以在成员例程中使用const_cast以避免重复的代码

来自分类Dev

避免为不同类中使用的类似背景工作人员重复代码

来自分类Dev

在球拍中使用地图时,如何解决代码以避免返回重复对的问题?

来自分类Dev

避免为不同类中使用的类似背景工作人员重复代码

来自分类Dev

是否可以在成员例程中使用const_cast以避免重复的代码

来自分类Dev

如何在R中使用SQL脚本

来自分类Dev

如何使用Browserify避免代码重复

来自分类Dev

通过使用继承避免代码重复