在R中,按特定字符分割字符向量;在新的矢量中保存第3件
发布时间:2020-12-15 05:02:14 所属栏目:Java 来源:网络整理
导读:我有一个’aaa_9999_1’形式的数据向量,其中第一部分是alpha位置代码,第二部分是四位数年份,最后一个是唯一的点标识符.例如,有多个sil_2007_X点,每个点具有不同的最后一位数.我需要使用“_”字符拆分此字段,并仅将唯一ID号保存到新矢量中.我试过了: oss$poi
我有一个’aaa_9999_1’形式的数据向量,其中第一部分是alpha位置代码,第二部分是四位数年份,最后一个是唯一的点标识符.例如,有多个sil_2007_X点,每个点具有不同的最后一位数.我需要使用“_”字符拆分此字段,并仅将唯一ID号保存到新矢量中.我试过了:
oss$point <- unlist(strsplit(oss$id,split='_',fixed=TRUE))[3] 基于此处的回复:R remove part of string. strsplit(oss$id,split= ‘_’,fixed=TRUE) 我可以生成拆分列表: > head(oss$point) [[1]] [1] "sil" "2007" "1" [[2]] [1] "sil" "2007" "2" [[3]] [1] "sil" "2007" "3" [[4]] [1] "sil" "2007" "4" [[5]] [1] "sil" "2007" "5" [[6]] [1] "sil" "2007" "6" 在最后添加[3]只给我[[3]]结果:“sil”“2007”“3”.我想要的是所有记录的第3部分(唯一编号)的向量.我觉得我已接近理解这一点,但是在截止日期项目上花费了太多时间(就像大多数时间一样).感谢您的任何反馈. 解决方法
strsplit创建一个列表,所以我会尝试以下方法:
lapply(strsplit(oss$id,fixed=TRUE),`[`,3) ## Output a list sapply(strsplit(oss$id,3) ## Output a vector (even though a list is also a vector) [提取第三个元素的方法.如果你喜欢矢量,用sapply代替lapply. 这是一个例子: mystring <- c("A_B_C","D_E_F") lapply(strsplit(mystring,"_"),3) # [[1]] # [1] "C" # # [[2]] # [1] "F" sapply(strsplit(mystring,3) # [1] "C" "F" 如果有一个易于定义的模式,gsub也可能是一个不错的选择,并避免分裂.请参阅DWin和Josh O’Brien的改进(更强大)版本的评论. gsub(".*_.*_(.*)","1",mystring) # [1] "C" "F" 最后,为了好玩,您可以扩展unlist方法,通过循环使用TRUE和FALSE的向量来提取每个第三项(因为我们事先知道所有拆分将产生相同的结构). unlist(strsplit(mystring,use.names = FALSE)[c(FALSE,FALSE,TRUE)] # [1] "C" "F" 如果你不是通过数字位置提取,而只是想在分隔符后提取最后一个值,那么你有几个不同的选择. 使用贪婪的正则表达式: gsub(".*_(.*)",mystring) # [1] "C" "F" 使用“stringi”包中的stri_extract *等便利函数: library(stringi) stri_extract_last_regex(mystring,"[A-Z]+") # [1] "C" "F" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |