r - 按空格拆分列

标签 r string split

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+")]

制作: enter image description here

最佳答案

我们可以用trimws 删除前缀子串并使用 read.table 阅读专栏与 sep作为返回两列的默认空间 data.framebase R

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

或者可以使用extract来自 tidyr

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

如果我们想要data.table , 用同样的方法可以读取 fread去掉前缀子串后

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

或者使用 select fread 中的选项

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

关于r - 按空格拆分列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71297836/

相关文章:

python - 我应该使用正则表达式来获取文件名吗?

c++ - 空终止符在比较时给字符串长度带来麻烦

c# - 使用多个分隔符将文本文件拆分为数组

Java Split - 长度错误

r - 如何设置barplot的x轴

r - 用户编写的函数将 NA 替换为 0,因为 for 循环在 r 中不起作用

java - 转义字符串中的特殊 XML 字符

JavaScript 通过多次出现的字母拆分字符串

r - 在 R 中子集化后保留列表元素名称

r - ...=... 在 R 中做什么?