使用 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
请注意,分隔符不仅仅是 "."
,而是表示点的表达式。
希望对您有所帮助。
如何使用 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
请注意,分隔符不仅仅是 "."
,而是表示点的表达式。
希望对您有所帮助。