在第一周期R上分开

在第一周期R上分开,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我有一个数据框,在这个数据框中,我希望通过第一个。。var中的值当前有两个期间。我想先给这些新名字起个名字。我已经添加了我的数据帧以及它的屏幕截图。最后我展示了我的尝试 我们应该有一个名为First的新专栏,它持有美国股票的价值。第二列名为second,包含值30DAY\u IMPVOL 谢谢我们可以使用“提取”来捕获非文本的字符。[^.]+从字符串的开始处作为一个组,后跟。\\。第二组中的其余字符用于第二列 library(dplyr) library(tidyr) df %>%

我有一个数据框,在这个数据框中,我希望通过第一个。。var中的值当前有两个期间。我想先给这些新名字起个名字。我已经添加了我的数据帧以及它的屏幕截图。最后我展示了我的尝试

我们应该有一个名为First的新专栏,它持有美国股票的价值。第二列名为second,包含值30DAY\u IMPVOL

谢谢

我们可以使用“提取”来捕获非文本的字符。[^.]+从字符串的开始处作为一个组,后跟。\\。第二组中的其余字符用于第二列

library(dplyr)
library(tidyr)
df %>%
    extract(var, into = c("First", "Second"), "^([^.]+)\\.(.*)")
或者只使用[.]作为sep。它将分成两列,并带有警告,因为有多个。这将在第一次发生时分割

我们可以使用extract来捕获非文本的字符。[^.]+从字符串的开始处作为一个组,后跟。\\。第二组中的其余字符用于第二列

library(dplyr)
library(tidyr)
df %>%
    extract(var, into = c("First", "Second"), "^([^.]+)\\.(.*)")
或者只使用[.]作为sep。它将分成两列,并带有警告,因为有多个。这将在第一次发生时分割

您需要使用如下所示的额外参数

df %>%
  separate(var, c("First","second"), "\\.",extra = "merge")
# A tibble: 6 x 4
  Date.Dates First          second                    val               
  <chr>      <chr>          <chr>                     <chr>             
1 42370      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 59.835999999999999
2 42373      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 67.208600000000004
3 42374      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 61.522599999999997
4 42375      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 63.298900000000003
5 42376      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 66.243200000000002
6 42377      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 69.282899999999998
您需要使用如下所示的额外参数

df %>%
  separate(var, c("First","second"), "\\.",extra = "merge")
# A tibble: 6 x 4
  Date.Dates First          second                    val               
  <chr>      <chr>          <chr>                     <chr>             
1 42370      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 59.835999999999999
2 42373      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 67.208600000000004
3 42374      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 61.522599999999997
4 42375      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 63.298900000000003
5 42376      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 66.243200000000002
6 42377      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 69.282899999999998
我们可以使用str_split/str_split_fixed from stringr,其中可以指定要拆分字符串n的部分数量。因为这里我们只需要2列,所以可以指定n=2

我们可以使用str_split/str_split_fixed from stringr,其中可以指定要拆分字符串n的部分数量。因为这里我们只需要2列,所以可以指定n=2


你真的需要那一步吗。它正在创建一个同时包含“字符/数字”混音的列。您真的需要在那里进行聚集步骤吗。它正在创建一个包含“字符/数字”组合的列,谢谢@Ronak。我从你所有的帖子中学习。但是,我决定用akrun回答。一如既往,谢谢@Ronak。我从你所有的帖子中学习。不过,已经决定用阿克伦回答。
df[c("First", "Second")] <- read.csv(text = sub("\\.", ",", df$var), header = FALSE)
df %>%
  separate(var, c("First","second"), "\\.",extra = "merge")
# A tibble: 6 x 4
  Date.Dates First          second                    val               
  <chr>      <chr>          <chr>                     <chr>             
1 42370      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 59.835999999999999
2 42373      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 67.208600000000004
3 42374      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 61.522599999999997
4 42375      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 63.298900000000003
5 42376      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 66.243200000000002
6 42377      SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF 69.282899999999998
stringr::str_split_fixed(df$var, "\\.", 2) %>%
        as.data.frame() %>%
       setNames(c('First', 'Second'))

#           First                    Second
#1 SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF
#2 SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF
#3 SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF
#4 SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF
#5 SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF
#6 SHOP US Equity 30DAY_IMPVOL_100.0%MNY_DF