从数据框中提取列的最后两个字符。

5

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

我有一个数据框,包含三列(日期,描述,借方)

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

我想提取第二列(即描述)的最后两个字符(即两个字母的州缩写)。我不太熟悉apply类型的函数。

我尝试使用

 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)) - HubertL
感谢大家的建议。我注意到你们的建议是有效的,但只能在语句中分配值时才有效。当我从函数中获取df时似乎不起作用。对此有什么想法吗?谢谢。 - MVigoda
4个回答

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

1
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

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

0
我们可以使用sub
df$State <- sub(".*\\s+", "", df[,2])
df$State
#[1] "VA" "FL" "GA"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接