从data.frame中的列中提取最后2个字符

时间:2016-05-02 23:10:04

标签: r dataframe extract

我是R编程的新手,已经搜索了很多小时。我很感激你的帮助。

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

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

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

我尝试过使用

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

但是收到以下错误消息

fee_chart

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

我很确定我遗漏了一些非常基本的东西,所以非常感谢你的帮助

谢谢

5 个答案:

答案 0 :(得分:5)

library(stringr)
str_sub(a$Description,-2,-1)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这是一个正则表达式版本,使用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

答案 3 :(得分:0)

我们可以使用sub

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

答案 4 :(得分:0)

一种更优雅的方式:

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

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