如何基于筛选器中的dataframe创建命名列表

如何基于筛选器中的dataframe创建命名列表,r,list,named,R,List,Named,我的问题是如何简化下面的代码 我有一个包含两列(或更多)的数据框,其中我对列“a”中的所有值感兴趣,其中列“b”的值为x。 因为x可以是一个或多个值,所以我希望在所有可能的过滤器中构建一个命名列表 所以,我是R的新手,我解决了这个问题,但我认为这不是最好的解决方案 a <- c('a', 'b','c','d','e','f','g','h','i') b <- c('aa', 'bb','cc') ds <- data.frame(a, b) func <- func

我的问题是如何简化下面的代码

我有一个包含两列(或更多)的数据框,其中我对列“a”中的所有值感兴趣,其中列“b”的值为x。 因为x可以是一个或多个值,所以我希望在所有可能的过滤器中构建一个命名列表

所以,我是R的新手,我解决了这个问题,但我认为这不是最好的解决方案

a <- c('a', 'b','c','d','e','f','g','h','i')
b <- c('aa', 'bb','cc')
ds <- data.frame(a, b)

func <- function(ds, target_col, query_col, value){ 
    return (unlist(list(unique(as.vector(ds[ds[query_col] == value,][target_col][,1])))))
}

named_list <- list()
for (i in b){
    named_list[[i]] <- func(ds, 'a', 'b', i)
}

a
func
可以简化;假设
target\u col
的长度始终为1,则以下为等效值:

func <- function(ds, target_col, query_col, value){ 
    return (unique(as.vector(ds[ds[query_col] == value, target_col])))
}

其中
setNames
创建一个命名向量,其中的名称与值相同
lappy
使用此向量中的名称输出命名列表。

谢谢,apply系列仍然很奇怪,但看起来非常有用
named_list2 <- lapply(setNames(nm = b), func, ds = ds, target_col = "a", query_col = "b")