对于R数据帧中的每一列

时间:2018-11-12 07:10:14

标签: r for-loop

我想知道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"))

}

1 个答案:

答案 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))

否则,您的语法似乎还不错,只需遍历一组名称并按照我描述的方式对数据框进行索引。希望这可以回答您的问题。