【问题标题】:R: Is it possible to 'copy/paste' data into R? [duplicate]R:是否可以将数据“复制/粘贴”到 R 中? [复制]
【发布时间】:2021-10-20 18:56:15
【问题描述】:

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

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)

有没有更“直接”(即更快的方式)来做到这一点?

谢谢!

【问题讨论】:

  • 您在寻找类似 readClipboard() 函数的东西吗?
  • @Flow博士:谢谢你的回答!我以前从未听说过这个功能!它是如何工作的?

标签: r data-manipulation


【解决方案1】:

而不是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)

【讨论】:

    【解决方案2】:

    更简单的选择是复制行 (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 ...
    

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

    soread(out = "df1")
    

    基于?soread的用法是

    soread( sep = "", 标头 = 真, 字符串AsFactors = FALSE, skipAfterHeader = NULL, 出 = “mydf” )


    它可以从github 安装

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

    【讨论】:

    • 感谢您的回答!我现在就试试这个!我想知道是否有办法在基础 R 中做到这一点?
    • @stats555 我不知道。也许你也可以使用datapasta,这又是一个包函数
    • @Akrun:谢谢你的回复!我仍然对它是如何工作的感到有点困惑。我从 github 安装了溢出库。然后我突出显示了我想要的所有数据。然后我输入了命令:soread()。
    • 但结果如下:在您的工作区 [1] soread.. (或 0-length row.names) 中创建的 data.frame “mydf”
    • @stats555 你需要用Ctrl + C复制行
    【解决方案3】:

    这在带有read.tabletext= 参数的基础R 中很容易:您需要指定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
    ")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-20
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      • 2016-04-03
      • 2019-11-16
      相关资源
      最近更新 更多