【问题标题】:Putting output in R into excel将R中的输出放入excel
【发布时间】:2013-02-20 14:02:01
【问题描述】:

伙计们,我有一个代码可以生成 2 列数据(例如数字、中位数),这些数据指的是一个特定的人……但我已经对 7 个人进行了抽样 所以基本上我得到了这个输出:

[[1]
Number Median
1       5
2       3  
.....
[[2]]
Number Median
1       6
2       4
....
[[3]]
Number Median
1       3
2       5

所以我基本上得到了这个输出....直到 [[7]] 我尝试使用此代码在 excel 中传输此输出

write.csv(cbind(data),"data1.csv")

我得到了这种类型的输出:

list(c(Median =.......It lists all the median on the rows

但我希望它在 NOT ROWS 列中保存引用“中位数”和“数字”的数据

如果我只是输入

write.csv(data,"data1.csv")

我收到一个错误

arguments imply differing number of rows: 157, 179, 178, 180

【问题讨论】:

  • 在尝试将其写为 csv 之前,您需要将数据设为 R 中的数据框格式。如果您的列表名为data,那么one_big_dataframe = do.call(rbind, data) 之类的名称应该可以让您到达那里。

标签: r excel import export


【解决方案1】:

正如 Marius 所说,您有一个 listdata.frames,无法写入 .csv 文件。你需要做的:

NewDataFrame <- do.call("rbind", YourList)
write.csv(NewDataFrame, "Data.csv")

do.calllist 中获取每个元素,并将您告诉它的任何函数(在本例中为rbind)应用于所有元素。

【讨论】:

  • 感谢 Senor 和 Marius ......但我想知道有没有办法让它在 excel 中看起来像这样:数字,速度......数字,速度......等等。 ..而不是将所有内容都放在 2 列中
  • 然后用"cbind"代替"rbind"
  • 如果我这样做'参数意味着不同的行数:59、56',我会收到这样的错误
【解决方案2】:

这里有两个选项。两者都使用以下示例数据:

myList <- list(data.frame(matrix(1:4, ncol = 2)),
               data.frame(matrix(3:10, ncol = 2)),
               data.frame(matrix(11:14, ncol =2)))
myList
# [[1]]
#   X1 X2
# 1  1  3
# 2  2  4
# 
# [[2]]
#   X1 X2
# 1  3  7
# 2  4  8
# 3  5  9
# 4  6 10
# 
# [[3]]
#   X1 X2
# 1 11 13
# 2 12 14

选项 1:编写一个 csv 文件,其中 data.frames 与 list 中的一样

sink("list_of_dataframes.csv", type="output")
invisible(lapply(myList, function(x) dput(write.csv(x))))
sink()

如果您在文本编辑器中打开生成的“list_of_dataframes.csv”文件,您将得到如下所示的内容。当您将其读入电子表格程序时,第一列将包含行名和 NULL,将每个 data.frame 分开:

"","X1","X2"
"1",1,3
"2",2,4
NULL
"","X1","X2"
"1",3,7
"2",4,8
"3",5,9
"4",6,10
NULL
"","X1","X2"
"1",11,13
"2",12,14
NULL

选项 2:编写或搜索 cbind 的版本,该版本可容纳具有不同行数的绑定 data.frames。

这是我编写的一个这样的函数。

cbind2 <- function(datalist) {
  nrows <- max(sapply(datalist, nrow))
  expandmyrows <- function(mydata, rowsneeded) {
    temp1 = names(mydata)
    rowsneeded = rowsneeded - nrow(mydata)
    temp2 = setNames(data.frame(
      matrix(rep(NA, length(temp1) * rowsneeded),
             ncol = length(temp1))), temp1)
    rbind(mydata, temp2)
  }
  do.call(cbind, lapply(datalist, expandmyrows, rowsneeded = nrows))
}

这是应用于您的列表的函数:

cbind2(myList)
#   X1 X2 X1 X2 X1 X2
# 1  1  3  3  7 11 13
# 2  2  4  4  8 12 14
# 3 NA NA  5  9 NA NA
# 4 NA NA  6 10 NA NA

该输出应该很容易与write.csv 和相关函数一起使用。

【讨论】:

    猜你喜欢
    • 2015-08-12
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 2019-04-04
    • 2011-04-25
    相关资源
    最近更新 更多