gpt4 book ai didi

r - 在 R 中,按特定字符分割字符向量;将第三 block 保存在新向量中

转载 作者:行者123 更新时间:2023-12-04 22:12:53 26 4
gpt4 key购买 nike

我有一个‘aaa_9999_1’形式的数据向量,其中第一部分是一个字母位置代码,第二部分是四位数的年份,最后是一个唯一的点标识符。例如,有多个 sil_2007_X 点,每个点都有不同的最后一位。我需要使用“_”字符拆分此字段,并仅将唯一 ID 号保存到新向量中。我试过:

oss$point <- unlist(strsplit(oss$id, split='_', fixed=TRUE))[3]

基于此处的回复: R remove part of string .
我得到一个单一的“1”响应。如果我只是跑
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”。我想要的是所有记录的第三部分(唯一编号)的向量。我觉得我已经接近理解这一点了,但是在截止日期的项目上花费了太多时间(就像一天中的大部分时间)。感谢您的任何反馈。

最佳答案

strsplit创建一个列表,所以我会尝试以下操作:

lapply(strsplit(oss$id, split='_', fixed=TRUE), `[`, 3) ## Output a list
sapply(strsplit(oss$id, split='_', fixed=TRUE), `[`, 3) ## Output a vector (even though a list is also a vector)
[表示提取第三个元素。如果您更喜欢矢量,请替换 lapplysapply .

下面是一个例子:
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也可能是一个不错的选择,并避免 split 。请参阅来自 DWin 和 Josh O'Brien 的改进(更健壮)版本的评论。
gsub(".*_.*_(.*)", "\\1", mystring)
# [1] "C" "F"

最后,为了好玩,您可以扩展 unlist通过回收 TRUE 的向量使其工作的方法s 和 FALSE s 提取每三个项目(因为我们事先知道所有拆分将导致相同的结构)。
unlist(strsplit(mystring, "_"), use.names = FALSE)[c(FALSE, FALSE, TRUE)]
# [1] "C" "F"

如果您不是按数字位置提取,而只是想提取分隔符后的最后一个值,那么您有几种不同的选择。

使用贪婪的正则表达式:
gsub(".*_(.*)", "\\1", mystring)
# [1] "C" "F"

使用像 stri_extract* 这样的便利功能来自“stringi”包:
library(stringi)
stri_extract_last_regex(mystring, "[A-Z]+")
# [1] "C" "F"

关于r - 在 R 中,按特定字符分割字符向量;将第三 block 保存在新向量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19410206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com