使用 Base R 将 data.frame data.table 中的字符串拆分为两列

Split string in data.frame data.table into two columns with Base R

如何使用 Base R 将列 rn 拆分为两列? 我尝试 strsplit(schluempfe$rn, ".", fixed=TRUE) 成功拆分,但我不知道如何使用此函数获得两列。我需要用 cbind() 将它们绑定回去吗? 如果这不可能,我将恢复为 separate() 或 str_split_fixed() 但它 "seems simple enough" 对于 Base R.

> str(schluempfe)
Classes ‘data.table’ and 'data.frame':  13534 obs. of  2 variables:
 $ rn    : chr  "oberschlumpf.2020-05-13" "oberschlumpf.2020-05-12" 
"oberschlumpf.2020-05-11" "oberschlumpf.2020-05-10" ...
 $ reCNru: num  15.9 19.2 25.2 21.3 18.6 ...
 - attr(*, ".internal.selfref")=<externalptr> 

作为我希望看到的输出

Classes ‘data.table’ and 'data.frame':  13534 obs. of  3 variables:
 $ rn1   : chr  "oberschlumpf" "oberschlumpf" "oberschlumpf" "oberschlumpf" ...
 $ rn2   : chr  "2020-05-130" "2020-05-12" "2020-05-11" "2020-05-10" ...
 $ reCNru: num  15.9 19.2 25.2 21.3 18.6 ...
 - attr(*, ".internal.selfref")=<externalptr> 

首先,我们需要一些样本数据,取自您发布的内容:

dataset <- data.frame(reCNru = c(15.9, 19.2, 25.2, 21.3),
                      rn = c("oberschlumpf.2020-05-13", "oberschlumpf.2020-05-12", 
                             "oberschlumpf.2020-05-11", "oberschlumpf.2020-05-10"), 
                      stringsAsFactors = FALSE)

然后我们在Base R中应用以下代码:

newdataset <- setNames(do.call(rbind.data.frame, strsplit(unlist(dataset$rn), '\.')), 
         c('rn1', 'rn2')) 
newdataset$reCNru <- dataset$reCNru

或许看看tidyverse给出的解决方案有意思:

dataset %>% tidyr::separate(col = rn, into = c("rn1","rn2"), sep = "\.")

您将拥有:

reCNru          rn1        rn2
1   15.9 oberschlumpf 2020-05-13
2   19.2 oberschlumpf 2020-05-12
3   25.2 oberschlumpf 2020-05-11
4   21.3 oberschlumpf 2020-05-10

请注意,分隔符不仅仅是 ".",而是表示点的表达式。

希望对您有所帮助。