75

我在另一个应用程序(例如电子表格,如 Excel 或文本编辑器)中打开了我的数据。如果我将该数据复制到我的操作系统剪贴板,我如何将它作为 data.frame 读入 R?

4

12 回答 12

82

假设您在 Windows 剪贴板中有数据(例如,从 Excel 复制的数据),将该数据放入以copdatR 命名的变量中,请使用:

copdat <- read.delim("clipboard")

如果要将数据从命名为 R 的变量复制rdat到 Windows 剪贴板(例如,复制到 Excel),请使用:

write.table(rdat, "clipboard", sep="\t", row.names=FALSE, col.names=FALSE)
于 2012-11-18T01:32:13.137 回答
64

用于“剪贴板”的名称和确切连接因操作系统而异。

对于 Windows:

x <- read.delim("clipboard")

对于 Mac 操作系统:

x <- read.delim(pipe("pbpaste"))

这是有效的,因为 read.delim 和许多函数一样,将接受一系列连接类型,而不仅仅是一个文件。对于 Mac,我们实际上使用的是管道。help(connections)信息量很大。

psych 包有一个功能read.clipboard(),可以通过测试你的操作系统使这更容易一些。

正如其他人在这里指出的那样,您也可以写入剪贴板。通常有 32 K 的限制,可以通过在剪贴板后添加连字符和数字来提高限制,例如,从对象 df 传递高达 256 K 的数据:

write.table(df, "clipboard-256")
于 2012-11-18T22:53:56.990 回答
15

有一个 R 包/RStudio 插件datapasta可以非常巧妙地做到这一点 - 请参阅https://CRAN.R-project.org/package=datapasta。下图展示了它的简单性

在此处输入图像描述

于 2016-11-30T15:30:01.927 回答
10

如果您想从电子表格中读取表格数据,我使用了以下代码

read.table(file = "clipboard", sep = "\t", header=TRUE)
于 2014-10-03T17:40:10.127 回答
6

输入data = as.numeric(read.table(text = "125 140 200 200 190 ", sep = " "))您的数字在text = " "引号之间的位置。

于 2012-11-18T01:11:43.700 回答
5

我已经测试并在 Windows 和 MacOS 上工作的一种方法是textConnection()使用read.table().

首先,将数据作为文本粘贴到变量中:

density_water_str <-   "T_/K Density_g/mL D2O
273 0.999841 1.10469
274 0.999900 NA
275 0.999941 NA
276 0.999965 NA
277 0.999973 1.1057
278 0.999965 1.10562
279 0.999941 NA
280 0.999902 NA
281 0.999849 NA
282 0.999781 NA
281 0.999700 NA"

然后,使用 read.table() 读取文本字符串

density_water <- read.table(textConnection(
                                object = density_water_str), 
                            header = TRUE, 
                            sep = "", 
                            stringsAsFactors = FALSE)

未在 Linux 或其他 Unix 系统上测试,但我相信它应该可以跨平台工作。

于 2018-07-31T12:08:38.463 回答
1

为了使用“datapasta”补充“wjchulme”答案,如果您想通过 R 设置/解释 datapasta 的输出以便使用剪贴板内容设置变量,可以执行以下操作:

read.from.clipboard <- function() {
  mydata<-eval(parse(text=paste(capture.output(datapasta::tribble_paste(output_context = datapasta::console_context()), file=NULL), collapse="")))
  str(mydata); View(capture.output(str(mydata), file=NULL)) #Check guessed format is ok
  return(mydata)
}
mydata<-read.from.clipboard() #Tibble format
mydata<-as.data.frame(read.from.clipboard()) #Data.frame format

于 2019-05-03T08:08:05.913 回答
1

我正在使用 Mojave 10.14

输入命令:X<-read.delim("clipboard")我在 Rstudio 版本 1.1.463 for Mac 中遇到以下警告:

Error in file(file, "rt") : cannot open the connection In addition: Warning message: In 
file(file, "rt") : cannot open file 'pbpaste': No such file or directory 

通过谷歌搜索解决方案,我已经尝试并测试了无数的解决方案、包和命令来运行它,并且经过日日夜夜的试用,终于现在它可以工作了。

我希望没有人再因这个问题而遭受如此多的痛苦,因此我分享了这些信息。

请遵循以下所有内容,因为我不确定哪个特定安装有魔力(下载不需要按此特定顺序):

  1. R-3.6.1.pkghttps://cran.r-project.org/bin/macosx/下载

  2. 从https://www.rstudio.com/products/rstudio/download/#download下载 Rstudio

  3. rcmdr在 Rstudio 中安装包

    转到“工具”>“安装包”>输入rcmdr

  4. 从https://www.xquartz.org/下载 XQuartz 'X11'

  5. 下载所有包

    转到https://cran.r-project.org/bin/macosx/tools/,然后下载以下工具:

    • clang-8.0.0.pkg(OS X 10.11+,签名,64 位)
    • gfortran-4.2.3.pkg(OS X 10.5+,签名,64 位驱动程序)
    • tcltk-8.5.5-x11.pkg(OS X 10.5+,签名)
  6. 现在回到 Rstudio 并输入:

    X<-read.delim("clipboard") 
    X 
    

    excel 中复制的数据现在将导入 Rstudio 控制台。

希望这些信息将被证明是有帮助的。

于 2019-08-27T14:47:43.950 回答
0

我需要将复合复制到 Windows中,同时read.table()在我的 URL 周围输出带有引号的字符向量。相反,我使用writeClipboard(URL,format=1)了 from package ,它成功了。

于 2016-03-30T20:32:53.880 回答
0

查看?file, 部分的文档Clipboard

剪贴板文件只能在“r”模式下与 description = “clipboard”一起使用。这将读取 X11 主要选择(请参阅http://standards.freedesktop.org/clipboards-spec/clipboards-latest.txt),也可以将其指定为“X11_primary”,将次要选择指定为“X11_secondary”。在大多数系统上,剪贴板选择(由“编辑”菜单中的“复制”使用)可以指定为“X11_clipboard”。当打开剪贴板进行阅读时,内容会立即复制到连接中的内部存储中。希望写入 X11 选项之一的 Unix 用户可以通过 xclip ( http://sourceforge.net/projects/xclip/ ) 或 xsel ( http://www.vergenet.net/~conrad/software /xsel/),例如通过 pipe("xclip -i", "w") 进行主要选择。macOS 用户可以使用 pipe("pbpaste") 和 pipe("pbcopy", "w") 来读取和写入该系统的剪贴板。

因此,例如使用 magrittr:

base::file(description='clipboard') %>% readLines
于 2017-05-25T09:33:30.110 回答
0

另一种方法是使用 clipr 包。我给你留下了我得到例子的链接。

library("clipr")
my_data <- read_clip_tbl()
my_data
于 2021-05-09T01:51:32.013 回答