我想知道for循环如何在R数据帧中工作。这不是可复制的示例,但是我想知道这个概念是否可行。如果df具有日期,ID,金额和4个变量,我可以遍历这些列吗?我需要从Var1到Var4列中删除NA行,基于Amount列创建一个“权重向量”,然后计算加权平均值。
a<- names(df)
a<- a[4:7]
a
[1] "Var1" "Var2" "Var3" "Var4"
#df has Date, ID, Amount ,Var1, Var2, Var3, Var4
for(i in a) {
NEW <-df[ !is.na(df$i), ]
NEW <- NEW %>%
group_by(Date) %>%
mutate(Weights = Amount/sum(Amount))
SUM <- NEW %>%
group_by(Date) %>%
summarise(Value = weighted.mean(i, Weights))
write.csv(SUM , paste0(i, ".csv"))
}
答案 0 :(得分:1)
您可以循环浏览列,但是您必须对语法进行一些调整。
如果要使用存储在变量中的列名索引数据框(在循环中,名称存储在循环变量i
中),则可以通过以下方式访问列:
1。)使用base-R子集语法,您必须使用[,i]
来子集所需的列:
df[,i]
注意:df$i
在这里不起作用。
2。)在dplyr
函数中,您必须将字符变量i
转换为dplyr的数据框名称。这可以通过功能as.name
完成。接下来,您必须评估名称,以便dplyr函数可以使用它。这是通过!!
(“爆炸”)功能完成的:
df %>% select(!!as.name(i))
或您的情况:
SUM <- NEW %>%
group_by(Date) %>%
summarise(Value = weighted.mean(!!as.name(i), Weights))
否则,您的语法似乎还不错,只需遍历一组名称并按照我描述的方式对数据框进行索引。希望这可以回答您的问题。