按空格分割列

3
DATA <- data.frame("V1" = c("SCORE : 9.931 5.092",
                            "SCORE : 6.00007 15.1248",
                            "SCORE : 1.0002 12.987532",
                            "SCORE : 3.1 3.98532"))
WANT <- data.frame("VAR1" = c(9.931, 6.00007, 1.0002, 3.1),
                   'VAR2' = c(5.092, 15.1248, 12.987532, 3.98532))

我手头有一些学生考试成绩的数据,它们被输入成类似'DATA'中所示的样子,但我希望将其分开,变成'WANT'框架中所示的形式,其中第一个数字在'VAR1'中,第二个数字在'VAR2'中,忽略空格。
DATA[, c("VAR1", "VAR2") := trimws(V1, whitespace = ".*:\\s+")]

产品: 输入图像描述

1个回答

3

我们可以使用trimws函数去除前缀子字符串,然后使用read.table函数并将sep参数设为默认空格来读取列数据,以在base R中返回一个包含两列的data.frame

read.table(text = trimws(DATA$V1, whitespace = ".*:\\s+"), 
   header = FALSE, col.names = c("VAR1", "VAR2"))
     VAR1     VAR2
1 9.93100  5.09200
2 6.00007 15.12480
3 1.00020 12.98753
4 3.10000  3.98532

或者可以使用 tidyr 中的 extract 函数。

library(tidyr)
extract(DATA, V1, into = c("VAR1", "VAR2"),
    ".*:\\s+([0-9.]+)\\s+([0-9.]+)", convert = TRUE)
     VAR1     VAR2
1 9.93100  5.09200
2 6.00007 15.12480
3 1.00020 12.98753
4 3.10000  3.98532

如果我们想要使用 fread 读取 data.table,可以在移除前缀子字符串后使用相同的方法。
library(data.table)
fread(text = setDT(DATA)[, trimws(V1, whitespace = ".*:\\s+")], 
   col.names = c("VAR1", "VAR2"))
      VAR1     VAR2
     <num>    <num>
1: 9.93100  5.09200
2: 6.00007 15.12480
3: 1.00020 12.98753
4: 3.10000  3.98532

或者使用 fread 中的 select 选项。

fread(text = DATA$V1, select = c(3, 4), col.names = c("VAR1", "VAR2"))
     VAR1     VAR2
     <num>    <num>
1: 9.93100  5.09200
2: 6.00007 15.12480
3: 1.00020 12.98753
4: 3.10000  3.98532

或者将其读作四列,并进行子集

fread(text = DATA$V1)[, .(VAR1 = V3, VAR2 = V4)]
     VAR1     VAR2
     <num>    <num>
1: 9.93100  5.09200
2: 6.00007 15.12480
3: 1.00020 12.98753
4: 3.10000  3.98532

或者可以使用 tstrsplit

setDT(DATA)[, c("VAR1", "VAR2") := tstrsplit(trimws(V1, 
       whitespace = ".*:\\s+"), " ")]
DATA <- type.convert(DATA, as.is = TRUE)
DATA
                         V1    VAR1     VAR2
                     <char>   <num>    <num>
1:      SCORE : 9.931 5.092 9.93100  5.09200
2:  SCORE : 6.00007 15.1248 6.00007 15.12480
3: SCORE : 1.0002 12.987532 1.00020 12.98753
4:      SCORE : 3.1 3.98532 3.10000  3.98532

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接