【问题标题】:Subsetting data, if the column entry contains letters子集数据,如果列条目包含字母
【发布时间】:2021-03-29 20:50:15
【问题描述】:

我的数据如下:

DT <- as.data.frame(c("1","2", "3", "A", "B"))
names(DT)[1] <- "charnum"

我想要的很简单,但是我在stackoverflow上找不到例子。

我想将数据集一分为二。 DT1 包含 DT$charnum 包含数字的所有行,DT2 包含 DT$charnum 包含字母的所有行。我试过类似的东西:

DT1 <- DT[is.numeric(as.numeric(DT$charnum)),]

但这给出了:

[1] 1 2 3 A B
Levels: 1 2 3 A B

想要的结果:

> DT1
  charnum
1         1
2         2
3         3

> DT2
  charnum
1         A
2         B

【问题讨论】:

    标签: r string character subset


    【解决方案1】:

    您可以使用正则表达式将您拥有的两种类型的数据分开,然后将这两个数据集分开。

    result <- split(DT, grepl('^\\d+$', DT$charnum))
    DT1 <- type.convert(result[[1]])
    DT1
    
    #  charnum
    #4       A
    #5       B
    
    DT2 <- type.convert(result[[2]])
    DT2
    #  charnum
    #1       1
    #2       2
    #3       3
    

    【讨论】:

      【解决方案2】:

      使用tidyverse

      library(dplyr)
      library(purrr)
      library(stringr)
      DT %>% 
         group_split(grp = str_detect(charnum, "\\d+"), .keep = FALSE) %>% 
         map(type.convert, as.is = TRUE)
      

      【讨论】:

        猜你喜欢
        • 2017-03-15
        • 2012-01-02
        • 1970-01-01
        • 2013-09-06
        • 1970-01-01
        • 1970-01-01
        • 2019-02-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多