2016-08-13 113 views
1

如何將大量數據粘貼到R中的剪貼板上?將大量數據粘貼到R中的剪貼板

您可以使用write.table粘貼到剪貼板,或到(略)大128KB剪貼板的Windows,因爲NT介紹:

write.table(mtcars, "clipboard-128", sep="\t", row.names=FALSE) 

但是,如果你嘗試粘貼一個大的數據幀,您將收到一條錯誤:

big = data.frame(a=sample(LETTERS, 100000, replace=TRUE), b=rnorm(100000), c=rnorm(100000)) 
write.table(big, "clipboard-128", sep="\t", row.names=FALSE) 

Warning message: 
In .External2(C_writetable, x, file, nrow(x), p, rnames, sep, eol, : 
    clipboard buffer is full and output lost 

有什麼方法可以將大量數據以可由其他程序(如Excel)讀取的格式存入剪貼板?

+0

你想達到什麼樣的用例?爲什麼不提供下載數據到CSV或保存到Excel功能呢? – miraculixx

回答

4

將128更改爲16384,警告將消失。你需要增加限制。執行下面的命令後,您可以輕鬆地直接粘貼到Excel中。

write.table(big, "clipboard-16384", sep="\t", row.names=FALSE) 
0

如果你想粘貼超過128kb的數據,那麼你必須做一個字符串。您可以使用writeClipboard(knitr::kable(big))以降價格式粘貼非常大的表格,但這涉及到使用大型軟件包並提供了一個包含大量格式化字符的表格。

以下代碼使用toString()將data.frame轉換爲字符串,然後將格式更改爲使用換行符間的換行符進行製表符分隔。這使您可以複製大型數據表(最多可以測試10 MB而無任何問題)。

# copy a big data.frame to clipboard 
writeBigClipboard = function(x) 
{ 
    # convert x to a data.frame of char 
    for(col in 1:ncol(x)) 
     x[ , col] = as.character(x[ , col]) 

    # now convert its transpose into a string - so we get c(1st row), c(2nd row), ... 
    x = as.data.frame(t(x), stringsAsFactors=FALSE) 
    x = toString(x) 

    # convert the delimiter from comma to tab 
    x = gsub('\", \"', '\t', x, fixed=TRUE) 

    # convert EOL to a newline character 
    x = gsub('\"), c(\"', '\n', x, fixed=TRUE) 

    # chop off the first c(\" and the last \") 
    x = substr(x, 4, nchar(x)-2) 

    # now paste the goodies into excel 
    writeClipboard(x) 
} 

例子:

big = data.frame(a=sample(LETTERS, 100000, replace=TRUE), b=rnorm(100000), c=rnorm(100000)) 
writeBigClipboard(big) 

這是相當資源密集型不過,也許更有效的解決方案存在?