【问题标题】:Getting last character/number of data frame column获取数据框列的最后一个字符/编号
【发布时间】:2020-07-08 10:08:03
【问题描述】:

我正在尝试获取数据框中一系列符号的最后一个字符或编号,以便在之后过滤一些类别。但我没有得到预期的结果。

names = as.character(c("ABC Co","DEF Co","XYZ Co")) 
code = as.character(c("ABCN1","DEFMO2","XYZIOIP4")) #variable length
my_df = as.data.frame(cbind(names,code))

第一种方法:

my_df[,3] = substr(my_df[,2],length(my_df[,2]),length(my_df[,2]))

我希望收到的是:c("1","2","4")

我真正收到的是:c("C","F","Z")

然后,我意识到length(my_df[,2]) 是我的数据框的行数,而不是每个单元格的长度。所以,我决定创建这个循环:

for (i in length(nrow(my_df))){
  my_df[i,3] = substr(my_df[i,2],length(my_df[i,2]),length(my_df[i,2]))
}

我希望收到的是:c("1","2","4")

我真正收到的是:c("A","F","Z")

然后我尝试了:

for (i in length(nrow(my_df))){
  my_df[i,3] = substr(my_df[i,2],-1,-1)
}

我期望收到的是:c("1","2","4")

我真正收到的是:c("","F","Z")

没有运气,对我错过了什么有什么想法吗?非常感谢!

【问题讨论】:

    标签: r substr string-length


    【解决方案1】:

    我们可以使用sub

     sub(".*(\\d+$)", "\\1", my_df$code)
    

    【讨论】:

      【解决方案2】:

      你可以使用substr:

      my_df$last_char <- substr(code, nchar(code), nchar(code))
      # or my_df$last_char <- substr(my_df$code, nchar(my_df$code), nchar(my_df$code))
      

      输出

      my_df
      
      #   names     code last_char
      # 1 ABC Co    ABCN1         1
      # 2 DEF Co   DEFMO2         2
      # 3 XYZ Co XYZIOIP4         4
      

      【讨论】:

        【解决方案3】:

        length 是一个 vector(或 list)属性,而在 substr 中您可能需要一个 string 属性。 Base R 的nchar 有效。

        my_df = as.data.frame(cbind(names, code), stringsAsFactors = FALSE)
        substr(my_df[,2], nchar(my_df[,2]), nchar(my_df[,2]))
        # [1] "1" "2" "4"
        

        (我加了stringsAsFactors = FALSE,否则你需要加as.character。)

        【讨论】:

          【解决方案4】:

          如果最后一个字符总是一个数字,你可以这样做:

          library(stringr)
          str_extract(my_df$code, "\\d$")
          [1] "1" "2" "4"
          

          如果最后一个字符可以是任何字符,您可以这样做:

          str_extract(my_df$code, ".$")
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-04-07
            • 1970-01-01
            • 1970-01-01
            • 2021-07-18
            • 2021-09-05
            • 1970-01-01
            • 2020-10-04
            • 1970-01-01
            相关资源
            最近更新 更多