我有以下ID。
+---+---+---+---+----------------+-------------------+----+
| a| b| c| d| elements_array| main_array|flag|
+---+---+---+---+----------------+-------------------+----+
| a6| b6| c6|d27|[b2, c3, a1, d7]| [a6, b6, c6, d27]| 0|
| a9|b88|c54|d71|[b2, c3, a1, d7]|[a9, b88, c54, d71]| 0|
+---+---+---+---+----------------+-------------------+----+
我想提取它们的数字部分(001、002、003)。 我尝试了这个:
ids <- c('a-000', 'b-001', 'c-002')
返回以下内容:
(str_split(ids, '-', n=2))[2]
我不希望列表的第二个元素。我想要向量中所有元素的第二个元素。我知道这绝对是一个基本问题,但是如何解决语法冲突?通过lambda函数吗?
答案 0 :(得分:2)
此功能在R底下也可用。
sapply(strsplit(ids, "-"), `[`, 2)
# [1] "000" "001" "002"
您也可以尝试gsub
和substring
。
gsub("\\D+", "", ids)
# [1] "000" "001" "002"
substring(ids, 3)
# [1] "000" "001" "002"
答案 1 :(得分:1)
要继续尝试,可以使用sapply
:
sapply(stringr::str_split(ids, '-', n=2), `[`, 2)
#[1] "000" "001" "002"
最好在这里使用str_split_fixed
。
stringr::str_split_fixed(ids, '-', n=2)[, 2]
#[1] "000" "001" "002"
或者在基数R中:
sub('.*?-(.*)-?.*', '\\1', ids)
答案 2 :(得分:1)
您可以尝试str_remove(ids, "\\D+")
答案 3 :(得分:1)
使用基数R可以删除所有非数字字符:
ids <- c('a-000', 'b-001', 'c-002')
gsub("[^[:digit:]]", "", ids)
#> [1] "000" "001" "002"
[:digit:]
是数字的正则表达式,^
表示不是数字的所有内容,因此您基本上用空字符串""
替换所有其他字符。
答案 4 :(得分:0)
带有str_replace
library(stringr)
str_replace(ids, "\\D+", "")
#[1] "000" "001" "002"