将R data.frame复制到Excel电子表格

use*_*622 22 excel copy r rstudio

我有一个与这个问题完全相似的问题.

作为我工作的一部分,我必须将R Studio控制台的输出复制到excel工作表才能制作excel图表.但是,R Studio控制台使用格式化文本,excel读取效果不佳.为了补偿,我总是从R Studio控制台复制,粘贴到记事本,然后复制到Excel.这样,当我粘贴一个表时,我可以告诉excel它实际上是固定宽度分隔的数据,而不仅仅是一堆文本.

如何从R Studio控制台复制输出,使其作为无格式文本进入剪贴板,以便我可以将其直接粘贴到Excel中,从而将数字组织到不同的单元格中?这将非常有用,因为我不喜欢将表复制/粘贴到记事本中然后擅长制作图表.

Dar*_* PC 36

它的工作原理很简单.

首先,您必须在Rstudio的Viewer窗格中可视化您的数据(您可以使用该功能View()),然后您应该从最后一个值开始选择到第一个值,它是从下到上(见图).请注意,应完全选择第一个单元格.最后,右键单击选择,复制,然后根据需要将其粘贴到Excel中,无论是否有格式.

在此输入图像描述

祝好运!

更新:

基于这篇文章,其他选择是通过以下方式创建一个新功能来复制data.frame 到Excel clipboard:

write.excel <- function(x,row.names=FALSE,col.names=TRUE,...) {
  write.table(x,"clipboard",sep="\t",row.names=row.names,col.names=col.names,...)
}

write.excel(my.df)
Run Code Online (Sandbox Code Playgroud)

最后在Excel中使用Ctr + V :)

  • 替代方案比主要解决方案要好得多,我认为应该删除或保留主要注释。 (4认同)
  • `clipr::write_clip(df)` 是唯一对我有用的东西。从[此处](https://datacornering.com/3-ways-how-to-copy-from-r-to-excel-or-from-excel-to-r/) (4认同)
  • `View()`对我来说确实很关键,但有两件事:1)我没有自下而上......我只是点击并拖出框外直到所有内容都突出显示; 2)我无法选择列名_and_行名称标题(可能是因为我的对象是`data.table`并且行名称的存储方式不同).我的评论的最后一点是我在Linux(Mint 17.1)并使用LibreOffice. (2认同)
  • 另请注意,使用此解决方案,放入剪贴板的数据大小确实有限,@MattV 的答案通过 `max.size` 参数解决了这个问题。最后是关于 `dec` 参数的注释,根据您的安装,您希望将其设置为 `,` 就像 Matt 所做的那样或保持原样。 (2认同)

Mat*_*ttV 9

我通常采用以下功能:

cb <- function(df, sep="\t", dec=",", max.size=(200*1000)){
    # Copy a data.frame to clipboard
    write.table(df, paste0("clipboard-", formatC(max.size, format="f", digits=0)), sep=sep, row.names=FALSE, dec=dec)
  }
Run Code Online (Sandbox Code Playgroud)

几点说明:

  • Max.size允许您指定剪贴板取消前的大小(以千字节为单位),现在设置为~200MB.
  • 它非常适合将R数据帧从R studio会话复制到Excel(使用我的EU语言环境).您可能必须调整分隔符/小数符号才能使其适用于美国版本.

如何使用:

df <- mtcars
cb(df)
# Paste in excel as 'values'
Run Code Online (Sandbox Code Playgroud)


小智 9

这是迄今为止我发现的最简单的方法:

clipr::write_clip(my_df)

来源在这里


Mor*_*rad 8

根据我的经验,没有方便的方法,我使用两种方法:

对于小数据帧,使用RStudio的View(data.frame)功能,如果只复制没有标题的数据,它可以正常工作,但如果你想用标题复制,那么你必须先将它粘贴到记事本中,以便在左上角的空单元格中添加至少一个字符.

对于大型数据框架,请使用write.csvwrite.xls(从包中WriteXLS)