用于对矢量/列表的元素进行分组的功能

时间:2017-09-07 16:08:53

标签: r grouping

假设我有一个像

这样的向量
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中的此任务。

2 个答案:

答案 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