Moderat
Moderat

Reputation: 1552

How do I copy and paste data into R from the clipboard?

I have my data open in another application (e.g. a spreadsheet, like Excel, or a text editor). If I copy that data to my operating system clipboard, how can I read it into R as a data.frame?

Upvotes: 93

Views: 94871

Answers (13)

stevec
stevec

Reputation: 52208

On macOS, none of the other solutions would work for me.

What worked was:

system("pbpaste")

Upvotes: 0

Rafael Díaz
Rafael Díaz

Reputation: 2289

Another way is by using the clipr package. I leave you the link where I get the example.

library("clipr")
my_data <- read_clip_tbl()
my_data

Upvotes: 5

MattBagg
MattBagg

Reputation: 10478

The name and exact connection used for the 'clipboard' varies depending on the OS.

for Windows:

x <- read.delim("clipboard")

for Mac OS:

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

This works because read.delim, like many functions, will accept a range of connection types beyond just a file. For Macs we're actually using a pipe. help(connections) is pretty informative.

The psych package has a function read.clipboard() that makes this a little easier by testing for your OS.

As noted by others here, you can also write to the clipboard. There is normally a 32 K limit, which can be raised by using adding a hyphen and number after clipboard as in, for example, passing up to 256 K worth of data from object df with:

write.table(df, "clipboard-256")

Upvotes: 72

Sukirti Rana
Sukirti Rana

Reputation: 11

I am using Mojave 10.14

With the input of the command: X<-read.delim("clipboard") I encountered the following warning in Rstudio version Version 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 

Searching through Google for solution, I have tried and tested countless of solutions, packages and commands for this to run, and with days and nights of trial, finally now it's working.

I hope no one has to go through so much of pain again with this problem, therefore I am sharing this information.

Kindly follow all of the following, as I am unsure as to which particular installation did the magic (the downloads do not need to be in this particular order):

  1. Download R-3.6.1.pkg from https://cran.r-project.org/bin/macosx/

  2. Download Rstudio from https://www.rstudio.com/products/rstudio/download/#download

  3. Install the rcmdr package in Rstudio

    Go to "tools" > "Install Packages" > type rcmdr

  4. Download XQuartz 'X11' from https://www.xquartz.org/

  5. Download all the packages

    Go to https://cran.r-project.org/bin/macosx/tools/, then download the following tools:

    • clang-8.0.0.pkg (OS X 10.11+, signed, 64-bit)
    • gfortran-4.2.3.pkg (OS X 10.5+, signed, 64-bit driver)
    • tcltk-8.5.5-x11.pkg (OS X 10.5+, signed)
  6. Now go back to Rstudio and type:

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

    The copied data in excel will be now imported in Rstudio console.

Hope this information will prove to be helpful.

Upvotes: 1

XAVI
XAVI

Reputation: 51

To complement the "wjchulme" answer using "datapasta", if you want to set/interpret the output from datapasta by R in order to set a variable with the clipboard content, one coud do something like:

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

Upvotes: 1

Tom
Tom

Reputation: 714

A method that I've tested and works on both Windows and MacOS is to use textConnection() with read.table().

First, paste your data into a variable as text:

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"

Then, read the text string using read.table()

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

Not tested on Linux or other Unix systems, but I believe it should work cross-platform.

Upvotes: 8

isomorphismes
isomorphismes

Reputation: 8403

Look at the documentation for ?file, section Clipboard:

Clipboard file can be used with description = "clipboard" in mode "r" only. This reads the X11 primary selection (see http://standards.freedesktop.org/clipboards-spec/clipboards-latest.txt), which can also be specified as "X11_primary" and the secondary selection as "X11_secondary". On most systems the clipboard selection (that used by ‘Copy’ from an ‘Edit’ menu) can be specified as "X11_clipboard". When a clipboard is opened for reading, the contents are immediately copied to internal storage in the connection. Unix users wishing to write to one of the X11 selections may be able to do so via xclip (http://sourceforge.net/projects/xclip/) or xsel (http://www.vergenet.net/~conrad/software/xsel/), for example by pipe("xclip -i", "w") for the primary selection. macOS users can use pipe("pbpaste") and pipe("pbcopy", "w") to read from and write to that system's clipboard.

so, eg with magrittr:

base::file(description='clipboard') %>% readLines

Upvotes: 0

wjchulme
wjchulme

Reputation: 2028

There's an R package / RStudio plugin called datapasta that does this very neatly - see https://CRAN.R-project.org/package=datapasta. Image below is a demonstration of its simplicity

enter image description here

Upvotes: 18

Oscar
Oscar

Reputation: 1

I needed to copy a composite into the Windows , while read.table() outputted a character vector with quotation marks around my URL. Instead, I used writeClipboard(URL,format=1) from package , and it did the trick.

Upvotes: 0

bill_080
bill_080

Reputation: 4750

Assuming you have data in the Windows clipboard (for example, copied data from Excel), to put that data into a variable named copdat in R use:

copdat <- read.delim("clipboard")

If you want to copy data from an R variable named rdat into the Windows clipboard (for example, to copy into Excel) use:

write.table(rdat, "clipboard", sep="\t", row.names=FALSE, col.names=FALSE)

Upvotes: 98

psychonomics
psychonomics

Reputation: 774

If you want to read in tabular data from a spreadsheet, I have used the following code

read.table(file = "clipboard", sep = "\t", header=TRUE)

Upvotes: 13

Moderat
Moderat

Reputation: 1552

Type in data = as.numeric(read.table(text = "125 140 200 200 190 ", sep = " ")) where your numbers go in between the text = " " quotation marks.

Upvotes: 6

Related Questions