2017-09-07 59 views
1

假設我有一個載體如功能到一個向量/列表的組元素

vec <- 0:10 

和功能如

f <- function (x) x %% 3 

是否有R中一個內置的功能,將打破這個矢量當應用於每個元素時,基於f的返回值分組到組中?如果不是,那麼使用內置插件實現這個最直接的方法是什麼?

預期返回值是

list(c(0,3,6,9), c(1,4,7,10), c(2,5,8)) 

對於更復雜的例子,取字符串矢量,和組一起那些字謎(即,它們由相同的字母)。在這種情況下,f將採用一個字符串,小寫它並對其進行分類。在Unix系統上有可用的單詞列表:

words <- scan('/usr/share/dict/words', what=character, sep='\n') 

我不使用這些特定的數據結構(向量,列表)堅持,如果他們不是最適合於R.

+2

有'split':'分(0:10(0:10)%% 3)' –

+1

您將需要'VEC < - 0:10 '然後使用'split(vec,f(vec))'。正如你提到的那樣,分解字符串有'strsplit'。像'strsplit(c(「這是一些字符串」,「和另一個」),split =「」)'。 – lmo

+0

謝謝。你會發佈一個答案,或者這個問題太簡單了,不能保存,我最好刪除它? – Szabolcs

回答

2

split這個任務可以基於因素將矢量分成列表(等等)。有關更多信息,請參閱?split。我開始對基於字形的詞彙分組感興趣。因此,這裏是爲

vec = c("stop", "pots", "leaves") 
split(vec, sapply(vec, function(x) 
    paste(sort(unlist(strsplit(tolower(gsub(" ", "", x)), ""))), collapse = ""))) 
#$aeelsv 
#[1] "leaves" 

#$opst 
#[1] "stop" "pots" 
1

一個解決方案,您可以使用dplyr和改造輸入到data.frame。從那裏,代碼更易於閱讀:

library(dplyr) 
data.frame(
    value = vec, 
    stringsAsFactors = T 
) %>% 
mutate(
    result = f(value) 
) %>% 
group_by(result) %>% 
summarize(
    list_result = list(value) 
) %>% 
.$list_result 
相關問題