【问题标题】:Save contents of apply() to CSV将 apply() 的内容保存到 CSV
【发布时间】:2014-01-31 15:44:47
【问题描述】:

我在下面有一个示例数据:

library(prodlim)

NUM <- 100
dat1 <- SimSurv(NUM)
dat1$time <- sample(24:160,NUM,rep=TRUE)
dat1$X3 <- sample(0:1,NUM,rep=TRUE)
dat1$X4 <- sample(0:9,NUM,rep=TRUE)
dat1$X5 <- sample(c("a","b","c"),NUM,rep=TRUE)
dat1$X6 <- sample(c("was","que","koa","sim","sol"),NUM,rep=TRUE)
dat1$X7 <- sample(1:99,NUM,rep=TRUE)
dat1$X8 <- sample(1:200,NUM,rep=TRUE)

attach(dat1)

我发现了一行简洁的代码,它提供了简单的summary(dataset) 在问题“Loop through a .csv file in R, computing relative frequencies?”中一次无法完成的所有必要频率:

freq <- apply(X = dat1, MARGIN = 2, FUN = function(x) {summary(factor(x))})

我的问题是如何提取每个可变频率,以便可以在一个命令中将它们保存在 CSV 文件中?

命令 freq[1:1]freq[n:n] 可以完成这项工作,但编辑每个命令以进行打印很繁琐,而且控制台中的输出需要进一步的文本编辑。

【问题讨论】:

  • 如果你想为每个变量使用不同的 csv 输出,你可以使用 sapply(seq(freq) , function(z) write.csv(freq[[z]] , paste0("fileout",z ".csv")))
  • 谢谢,但是如何增加要写入 CSV 的文件的长度?我的一些变量已经被切割成Others XXXXX,我想用尽所有变量值。
  • 如何将每个CSV的名称设置为变量名?
  • 对于 .csv 文件名,在 write.csv 调用中使用 paste0(names(freq[z]),".csv")
  • 找到了,我应该使用summary(mydata, maxsum=Inf) 来耗尽here 中的所有变量值。

标签: r csv matrix frequency


【解决方案1】:

@user20650 的帮助下,我设法解决了我的问题。

freq <- apply(X = dat1, MARGIN = 2, 
  FUN = function(x) {
    summary(factor(x), , maxsum=Inf))
    # maxsum=Inf will prevent truncation of value frequencies
})

sapply(seq(freq), 
  function(z) write.csv(
    freq[z], 
    paste0("path/to/folder/",names(freq[z]),".csv") 
  )
)

【讨论】:

  • 您没有使用sapply 的返回值。在这种情况下,我会使用 for 循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
相关资源
最近更新 更多