R data.table根据两个条件将列拆分为多列

R data.table根据两个条件将列拆分为多列,r,data.table,data-manipulation,R,Data.table,Data Manipulation,我想根据/或-将以下数据的Y列拆分为两列 df1 <- structure(list(Y = c("1", "2", "3", "4", "5", "6/7", "8-10")), .Names = "Y", row.names = c(NA, -7L) , class = "data.frame" ) library(data.table) dt1 <- data.table(df1) dt1[ , c

我想根据
/
-
将以下
数据的
Y
列拆分为两列

df1 <- 
  structure(list(Y = c("1", "2", "3", "4", "5", "6/7", "8-10")), 
            .Names = "Y", row.names = c(NA, -7L)
            , class = "data.frame"
            )
library(data.table)
dt1 <- data.table(df1)
dt1[ , c("Y1", "Y2") := tstrsplit(Y, "/", fixed = TRUE)]
dt1
      Y   Y1 Y2
1:    1    1 NA
2:    2    2 NA
3:    3    3 NA
4:    4    4 NA
5:    5    5 NA
6:  6/7    6  7
7: 8-10 8-10 NA

我该怎么做呢?

您只需选择第一个数字,即

library(data.table)
dt1[, Y1 := as.integer(gsub('[[:punct:]].*', '', Y))]
dt1
#      Y Y1
#1:    1  1
#2:    2  2
#3:    3  3
#4:    4  4
#5:    5  5
#6:  6/7  6
#7: 8-10  8

如何使最后一列为数字?您可以将
gsub
包装为
as.numeric
。我更新了我的答案
为。integer
可能更多efficient@akrun是的
library(data.table)
dt1[, Y1 := as.integer(gsub('[[:punct:]].*', '', Y))]
dt1
#      Y Y1
#1:    1  1
#2:    2  2
#3:    3  3
#4:    4  4
#5:    5  5
#6:  6/7  6
#7: 8-10  8