【问题标题】:extract last 2 chars from a column in a data.frame从 data.frame 中的列中提取最后 2 个字符
【发布时间】:2016-08-27 20:14:21
【问题描述】:

我是 R 编程新手,已经搜索了很多小时。非常感谢您的帮助。

我有一个数据框,有 3 列(日期、描述、借方)

      Date         Description   Debit
2014-01-01      "abcdef    VA"      15
2014-01-01     "ghijkl"    NY"      56

我正在尝试提取第二个(描述)列的最后 2 个字符(即 2 个字母的状态缩写)。我对应用类型的函数不太满意。

我尝试过使用

 l <- lapply(a$Description, function(x) {substr(x, nchar(x)-2+1, nchar(x))})

但得到以下错误信息

Error in nchar(x) : invalid multibyte string, element 1 

我尝试了多种其他方法,但出现了同样的错误。

我很确定我遗漏了一些非常基本的东西,因此非常感谢您的帮助

谢谢

【问题讨论】:

  • substr(df$Description, nchar(df$Description)-1, nchar(df$Description))
  • 谢谢大家的建议。我注意到您的建议有效,但前提是我在 stmt 中分配了值。当我从函数中获得 df 时,它似乎不起作用。对此有什么想法吗?谢谢

标签: r dataframe extract


【解决方案1】:
library(stringr)
str_sub(a$Description,-2,-1)

【讨论】:

    【解决方案2】:
    df <- data.frame(date = c("2015-01-01", "2015-02-01", "2015-01-15"),
                 jumble = c("12345 VA", "123 FL", "12354567732 GA"),
                 debit = c(15, 36, 20))
    
    df$jumble <- as.character(df$jumble)
    
    df$state <- substr(df$jumble, nchar(df$jumble)-1, nchar(df$jumble))
    
    df
            date         jumble debit state
    1 2015-01-01       12345 VA    15    VA
    2 2015-02-01         123 FL    36    FL
    3 2015-01-15 12354567732 GA    20    GA
    

    【讨论】:

      【解决方案3】:

      这是一个正则表达式版本,使用 Brandon S 的示例数据。正则表达式捕获从最后一个空白字符到字符串末尾的所有内容。

      df <- data.frame(date = c("2015-01-01", "2015-02-01", "2015-01-15"),
                       jumble = c("12345 VA", "123 FL", "12354567732 GA"),
                       debit = c(15, 36, 20))
      
      df$state <- gsub(".+\\s(.+)$", "\\1", df$jumble)
      
      df
      
              date         jumble debit state
      1 2015-01-01       12345 VA    15    VA
      2 2015-02-01         123 FL    36    FL
      3 2015-01-15 12354567732 GA    20    GA
      

      【讨论】:

        【解决方案4】:

        我们可以使用sub

        df$State <- sub(".*\\s+", "", df[,2])
        df$State
        #[1] "VA" "FL" "GA"
        

        【讨论】:

          【解决方案5】:

          更优雅的方式:

          df['Description'].str[-2:]
          

          我假设您的描述列是字符串类型(或对象类型)。

          【讨论】:

          • 熊猫的解决方案不错,但 OP 正在寻找 R 解决方案
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-19
          • 2021-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多