如何为数据帧中的每一列运行长代码块?

时间:2019-07-08 17:17:31

标签: r

所以我有一段代码编写,可以对具有108列的数据帧的某一列执行一些转换。该列的转换存储在与不同转换类型相对应的3个不同数据帧中。

我知道我可能根本没有高效地执行此操作,但是此代码适用于我需要的一列。但是,现在我需要为原始数据帧的每一列运行代码,创建324个数据帧。在这一点上,我并没有排除仅复制,粘贴,然后查找和替换列名称108次(那样会很乏味)的可能性。我遇到的问题是,我不知道如何对代码中涉及的所有操作和功能使用for循环(创建数据框,在这些数据框内创建列,转换这些列等)。

我的原始数据帧的每一列都称为字母,从A到DD。再次,我希望R等效于查找并替换108次,直到数据帧名称和所有内容。

这只是代码的一部分,如果相关的话:

feat <- read.csv2(file="S:/Wladimir Sarmiento/MLData.csv", header=T, stringsAsFactors=FALSE)
names(feat)[1]<- "A"
feat$A <- as.Date(feat$A)
feat[] <- lapply(feat, function(x) {
    if(is.character(x)) as.numeric(x) else x
 })



K.change.w <- data.frame(feat$A, feat$K)
K.change.m <-  data.frame(feat$A, feat$K)
K.change.3m <-  data.frame(feat$A, feat$K)



K.change.w <- mutate(K.change.w, K = K.change.w$feat.K - lag(K.change.w$feat.K, 5) )
K.change.m <- mutate(K.change.m, K = K.change.w$feat.K - lag(K.change.w$feat.K, 20) )
K.change.3m <- mutate(K.change.3m, K = K.change.w$feat.K - lag(K.change.w$feat.K, 62) )
```


roll.mean.m.K <- rollmean(K.change.w$K, 21, align="right", fill=NA)
K.change.w <- mutate(K.change.w, roll.mean.m.K)

zw <- read.zoo(K.change.w)
sd.m.K = rollapply(zw$K,21,sd,align="right", fill=NA) 
sd.m.K <- as.data.frame(sd.m.K)
K.change.w <- mutate(K.change.w, sd.m.K$sd.m.K)
names(K.change.w)[5]<- "sd.m.K"

K.change.w$z.m.K <- (K.change.w$K - K.change.w$roll.mean.m.K)/(K.change.w$sd.m.K)
ggplot(data=K.change.w, aes(x=feat.A, y=z.m.K, group=1)) + geom_point() + geom_line() + scale_x_date(labels = date_format("%Y")) + labs(title="K, W, M", x="Year", y=NULL) + geom_hline(yintercept=0, color="red")

roll.mean.m.K <- rollmean(K.change.m$K, 21, align="right", fill=NA)
K.change.m <- mutate(K.change.m, roll.mean.m.K)

zw <- read.zoo(K.change.m)
sd.m.K = rollapply(zw$K,21,sd,align="right", fill=NA) 
sd.m.K <- as.data.frame(sd.m.K)
K.change.m <- mutate(K.change.m, sd.m.K$sd.m.K)
names(K.change.m)[5]<- "sd.m.K"

K.change.m$z.m.K <- (K.change.m$K - K.change.m$roll.mean.m.K)/(K.change.m$sd.m.K)
ggplot(data=K.change.m, aes(x=feat.A, y=z.m.K, group=1)) + geom_point() + geom_line() + scale_x_date(labels = date_format("%Y")) + labs(title="K, M, M", x="Year", y=NULL) + geom_hline(yintercept=0, color="red")

roll.mean.m.K <- rollmean(K.change.3m$K, 21, align="right", fill=NA)
K.change.3m <- mutate(K.change.3m, roll.mean.m.K)

zw <- read.zoo(K.change.3m)
sd.m.K = rollapply(zw$K,21,sd,align="right", fill=NA) 
sd.m.K <- as.data.frame(sd.m.K)
K.change.3m <- mutate(K.change.3m, sd.m.K$sd.m.K)
names(K.change.3m)[5]<- "sd.m.K"

K.change.3m$z.m.K <- (K.change.3m$K - K.change.3m$roll.mean.m.K)/(K.change.3m$sd.m.K)
ggplot(data=K.change.3m, aes(x=feat.A, y=z.m.K, group=1)) + geom_point() + geom_line() + scale_x_date(labels = date_format("%Y")) + labs(title="K, 3M, M", x="Year", y=NULL) + geom_hline(yintercept=0, color="red")

如果R实际上只是在for循环中读取index变量并将其在代码中替换为所需的值,那就太好了。也就是说,将上面代码中的所有K更改为i,然后只运行for循环,每次迭代用新字母替换K。

0 个答案:

没有答案