【问题标题】:how to extract specific value in R如何在R中提取特定值
【发布时间】:2019-11-29 03:35:50
【问题描述】:

我想从数据框中提取我需要在 R 中进行数据排列的特定值。我无法想出在 R 中使用的任何方法,因此将不胜感激。

作为我的数据框中的示例,如下所示:

原始数据如下:

df <- data.frame(
  v1=c('aa',438652,22, ,01),
  v2=c(343012,45, ,'pi',75),
  v3=c(56,'hi',78,670934, ),
  v4=c( ,'cc',906235,05,44))

但是,我想将“6 位数字”提取到另一个新框架中 它看起来像这样:

new <- data.frame(
  v5=c(438652,343012,670934,906235))

有人有什么想法吗?那将是非常感谢!

【问题讨论】:

    标签: r numbers extract digits


    【解决方案1】:

    我们可以使用nchar来统计字符数

    temp <- as.character(unlist(df))
    data.frame(v5 = temp[nchar(temp) == 6])
    
    #      v5
    #1 438652
    #2 343012
    #3 670934
    #4 906235
    

    【讨论】:

    • 也许重要/有用的是指出这也将匹配“abcdef”,即 6 个字符长的非数字条目。
    【解决方案2】:

    你可以使用正则表达式

    as.numeric(as.character(unlist(df)[grep("\\d{6}", unlist(df))]))
    #[1] 438652 343012 670934 906235
    

    存储在一个新的data.frame

    data.frame(v5 = as.numeric(as.character(unlist(df)[grep("\\d{6}", unlist(df))])))
    #      v5
    #1 438652
    #2 343012
    #3 670934
    #4 906235
    

    【讨论】:

      【解决方案3】:

      这是tidyverse的选项

      library(tidyr)
      library(dplyr)
      pivot_longer(df, everything(), values_to = 'v5') %>%
          select(v5) %>%
          mutate(v5 = as.numeric(as.character(v5))) %>% 
          filter(nchar(v5) == 6, !is.na(v5)) 
      # A tibble: 4 x 1
      #      v5
      #   <dbl>
      #1 343012
      #2 438652
      #3 906235
      #4 670934
      

      或在base R

      v1 <- na.omit(as.numeric(t(df)))
      v1[nchar(v1)== 6]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-22
        • 1970-01-01
        • 2019-05-07
        • 2013-01-05
        • 1970-01-01
        • 2020-07-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多