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