获取数据框列的最后 character/number

Getting last character/number of data frame column

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

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")

运气不好,想知道我错过了什么吗?非常感谢!

如果最后一个字符始终是数字,您可以这样做:

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

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

str_extract(my_df$code, ".$")

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。)

您可以使用 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

我们可以使用sub

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