我有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)。
感谢。
答案 0 :(得分:0)
答案几乎是在Spacedman的评论中。 strsplit
和substr
是关键,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)))
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