【问题标题】:How to save all loop's results in a csv如何将所有循环的结果保存在 csv 中
【发布时间】:2015-10-18 11:53:30
【问题描述】:

考虑一下这个玩具数据框:

df <- read.table(text = "target birds    wolfs     
                         0       21         7  
                         0        8         4  
                         1        2         5 
                         1        2         4 
                         0        8         3 
                         1        1         12  
                         1        7         10 
                         1        1         9 ",header = TRUE)

我想运行一个循环函数来计算每个变量的 2:5 行的平均值并将所有结果保存为 CSV。

我写了这行代码:

for(i in names(df))  {print(mean(df[2:5,i]))}

得到以下结果:

[1] 0.5
[1] 5
[1] 4

但是当我尝试使用下面的代码将其导出到 csv 时,我在文件中只得到了最后一个结果:[1] 4。 代码:

for(i in names(df))  { j<-(mean(df[2:5,i]))
                       write.csv(j,"j.csv")    }

如何在同一个 csv 文件中获取所有结果的列表?

【问题讨论】:

  • write.csv 的第一个参数是“要写入的对象,最好是矩阵或数据框。如果不是,则尝试将 x 强制转换为数据框”。您可以使用rbind(colMeans(df[2:5,])) 制作一个 1 行矩阵并将其写出来。
  • 你为什么要这样做,为什么你不能这样做colMeans(df[2:5,])
  • 您在循环的每次迭代中都在写 j.csv。 j 只保存最后一个值。在循环j &lt;- list()之前对其进行初始化,将手段分配给j[[i]],并在整个循环完成后写入csv。也就是说,这不是计算列均值的正确方法。看看?colMeans?dplyr::summarize_each
  • This 我的回答可能非常有用;实际上它几乎是重复的,即使它需要适应导出文件而不是将它们保存在 R 环境中。
  • 你好@David Arenburg,我使用 mean 函数只是为了给出循环的结构。我的真实世界函数是不同的。

标签: r loops


【解决方案1】:

dplyr 中,您可以使用summarise_each 对数据框的每一列执行计算。

library(dplyr)
j <- slice(df,2:5) %>% # selects rows 2 to 5
  summarise_each(funs=funs(mean(.))) # computes mean of each column

结果在 data.frame 中:

j
  target birds wolfs
1    0.5     5     4

如果您希望每个变量的平均值在单独的行上,请使用 t()

t(j)
       [,1]
target  0.5
birds   5.0
wolfs   4.0

并导出结果:

write.csv(t(j),"j.csv")

【讨论】:

    猜你喜欢
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多