30

次のようなランダムな文字を含む文字列のリストがあります。

list=list()
list[1] = "djud7+dg[a]hs667"
list[2] = "7fd*hac11(5)"
list[3] = "2tu,g7gka5"

unique()このリストに少なくとも 1 回 ( ) 含まれている番号を知りたいです。私の例の解決策は次のとおりです。

解決: c(7,667,11,5,2)

誰かが 11 を「11」ではなく「1 と 1」と見なす方法を持っている場合、それも役に立ちます。この状態での解決策は次のとおりです。

解決: c(7,6,1,5,2)

(関連するテーマでこの投稿を見つけました:文字列のベクトルから数値を抽出する)

4

7 に答える 7

17

これはさらに別の答えです。これgregexprは、数字を見つけregmatchesて抽出するために使用します。

l <- c("djud7+dg[a]hs667", "7fd*hac11(5)", "2tu,g7gka5")

temp1 <- gregexpr("[0-9]", l)   # Individual digits
temp2 <- gregexpr("[0-9]+", l)  # Numbers with any number of digits

as.numeric(unique(unlist(regmatches(l, temp1))))
# [1] 7 6 1 5 2
as.numeric(unique(unlist(regmatches(l, temp2))))
# [1]   7 667  11   5   2
于 2013-06-09T14:34:12.107 に答える
9

stringiを使用したソリューション

 # extract the numbers:

 nums <- stri_extract_all_regex(list, "[0-9]+")

 # Make vector and get unique numbers:

 nums <- unlist(nums)
 nums <- unique(nums)

そして、それがあなたの最初の解決策です

R のオンライン スクリーンショット

2番目のソリューションでは、次を使用しますsubstr

nums_first <- sapply(nums, function(x) unique(substr(x,1,1)))
于 2016-10-07T09:13:07.667 に答える
6

およびパイプ演算子を使用したstringrソリューション。str_match_all最初の解決策:

library(stringr)
str_match_all(ll, "[0-9]+") %>% unlist %>% unique %>% as.numeric

2番目の解決策:

str_match_all(ll, "[0-9]") %>% unlist %>% unique %>% as.numeric

(注:私はリストとも呼んでいますll

于 2016-10-01T11:40:00.397 に答える