R:是否可以将 'copy/paste' 数据放入 R 中?

R: Is it possible to 'copy/paste' data into R?

我正在使用 R 编程语言。假设我在 Internet 浏览器中看到以下格式的数据(例如关于 Whosebug 问题):

weight   height age
1  2998.958 15.26611  53
2  3002.208 18.08711  52
3  3008.171 16.70896  49
4  3002.374 17.37032  55
5  3000.658 18.04860  50
6  3002.688 17.24797  45
7  3004.923 16.45360  47
8  2987.264 16.71712  47
9  3011.332 17.76626  50
10 2983.783 18.10337  42
11 3007.167 18.18355  50
12 3007.049 18.11375  53
13 3002.656 15.49990  42
14 2986.710 16.73089  47
15 2998.286 17.12075  52

问题:是否可以把这个数据带入R,直接把这个数据做成数据框(不用重新格式化,或者最少重新格式化)?

显然,下面的语句是行不通的:

my_data <- data.frame(weight   height age
                      1  2998.958 15.26611  53
                      2  3002.208 18.08711  52
                      3  3008.171 16.70896  49
                      4  3002.374 17.37032  55
                      5  3000.658 18.04860  50
                      6  3002.688 17.24797  45
                      7  3004.923 16.45360  47
                      8  2987.264 16.71712  47
                      9  3011.332 17.76626  50
                      10 2983.783 18.10337  42
                      11 3007.167 18.18355  50
                      12 3007.049 18.11375  53
                      13 3002.656 15.49990  42
                      14 2986.710 16.73089  47
                      15 2998.286 17.12075  52)

目前,我正在手动执行此操作,例如

weight <- c("2998.958", "3002.208", "3008.171", etc. )
height <- c("15.26611", etc. )
age <- c("53", "52", etc.)

my_data <- data.frame(weight, height, age)

是否有更“直接”(即更快的方法)来做到这一点?

谢谢!

更简单的选择是复制行 (Cntrl + C),然后使用 soread

library(overflow)
soread()
data.frame “mydf” created in your workspace
     weight   height age
1  2998.958 15.26611  53
2  3002.208 18.08711  52
3  3008.171 16.70896  49
4  3002.374 17.37032  55
5  3000.658 18.04860  50
6  3002.688 17.24797  45
7  3004.923 16.45360  47
8  2987.264 16.71712  47
9  3011.332 17.76626  50
...

检查

> str(mydf)
'data.frame':   15 obs. of  3 variables:
 $ weight: num  2999 3002 3008 3002 3001 ...
 $ height: num  15.3 18.1 16.7 17.4 18 ...
 $ age   : int  53 52 49 55 50 45 47 47 50 42 ...

如果我们想将其重命名为不同的对象,请更改默认为“mydf”的out

soread(out = "df1")

因为基于?soread的用法是

soread( sep = "", header = TRUE, stringsAsFactors = FALSE, skipAfterHeader = NULL, out = "mydf" )


它可以从 github

安装
source("http://news.mrdwab.com/install_github.R")
install_github("mrdwab/overflow-mrdwab")

而不是 data.frame。您可以将其传递给 read.table

read.table(text="weight   height age
1  2998.958 15.26611  53
2  3002.208 18.08711  52
3  3008.171 16.70896  49
4  3002.374 17.37032  55
5  3000.658 18.04860  50
6  3002.688 17.24797  45
7  3004.923 16.45360  47
8  2987.264 16.71712  47
9  3011.332 17.76626  50
10 2983.783 18.10337  42
11 3007.167 18.18355  50
12 3007.049 18.11375  53
13 3002.656 15.49990  42
14 2986.710 16.73089  47
15 2998.286 17.12075  52", header=TRUE)

如果数据在您的剪贴板上,您可以

read.table("clipboard", header=TRUE)

在 base R 中使用 read.tabletext= 参数很容易:您需要指定 header=TRUE(表示第一行是列名)和 row.names=1(表示第一列是行名)。将可选参数放在前面很方便,“乱序”,这样它们就可以在大文本块上方看到。

my_data <- read.table(header=TRUE,
row.names = 1,
text="
                         weight   height age
                      1  2998.958 15.26611  53
                      2  3002.208 18.08711  52
                      3  3008.171 16.70896  49
                      4  3002.374 17.37032  55
                      5  3000.658 18.04860  50
                      6  3002.688 17.24797  45
                      7  3004.923 16.45360  47
                      8  2987.264 16.71712  47
                      9  3011.332 17.76626  50
                      10 2983.783 18.10337  42
                      11 3007.167 18.18355  50
                      12 3007.049 18.11375  53
                      13 3002.656 15.49990  42
                      14 2986.710 16.73089  47
                      15 2998.286 17.12075  52
")