在行中分隔字符串

时间:2013-12-19 16:54:42

标签: string r word

我有id和姓氏的数据

id             nameL              L1        L2
000005            ALRAMMAL        ALML
000006 BUSTAMANTE MARTINEZ        BUTE      MAEZ
000007        MENDEZ-PEREZ        MEEZ      PEEZ
000008               BOYCE        BOCE
000009               LAW          LAW

我喜欢将名称分成2部分(如果可能),并从分隔的名称中抽象出前2个和后2个字母,然后将它们组合在一起(如L1和L2)。
感谢。

1 个答案:

答案 0 :(得分:0)

答案几乎是在Spacedman的评论中。 strsplitsubstr是关键,nchar将帮助您弄清楚如何获取最后两个字符。

将字符串拆分

x <- strsplit(mydf$nameL, " |-")
Lx <- vapply(x, length, 1L)

提取并粘贴第一个和最后两个字符

Z <- unlist(lapply(x, function(y) {
  ifelse(nchar(y) <= 4, y,
         paste0(substr(y, 1, 2), substr(y, nchar(y)-1, nchar(y))))
}))

使用新信息

创建一个长data.frame
df <- data.frame(id = rep(mydf$id, Lx), 
                 L = Z, 
                 time = paste0("L", sequence(Lx)))

使用“reshape2”中的dcast来获取您想要的更广泛的数据

library(reshape2)
dcast(df, id ~ time, value.var="L", fun.aggregate=as.character, fill = "")
#   id   L1   L2
# 1  5 ALAL     
# 2  6 BUTE MAEZ
# 3  7 MEEZ PEEZ
# 4  8 BOCE     
# 5  9  LAW