假设我有一个像
这样的向量Host-Name08
Host-Name09
Host-Name10
和
等功能vec <- 0:10
R中是否有内置函数,当应用于每个元素时,会根据f <- function (x) x %% 3
的返回值将此向量分成若干组?如果没有,使用内置函数实现此目的的最直接方法是什么?
预期回报值为
f
对于一个更复杂的例子,取一个字符串向量,并将那些是字谜(即它们由相同的字母组成)组合在一起。在这种情况下,list(c(0,3,6,9), c(1,4,7,10), c(2,5,8))
将采用字符串,小写,并对其进行排序。在Unix系统上有一个单词列表:
f
我不坚持使用这些特定的数据结构(向量,列表),如果它们不适合R中的此任务。
答案 0 :(得分: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 :(得分: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