【发布时间】:2016-01-07 09:05:55
【问题描述】:
我有一个包含 n 列的数据框,我需要获取其变量的组合:
例如:
df <- data.frame(A = c("a1","a2","a3","a4","a5","a6"),
B = c("a1","a1","a3","a3","a5","a5"),
C = c("a1","a1","a1","a3","a4","a4"),
D = c("a1","a1","a1","a3","a4","a5"))
我需要创建一个包含 n-1 个元素的列表,每个元素都包含数据框变量的所有唯一组合。第一个元素包括从第一列到最后一列的唯一值。对于每个后续元素,我需要删除前一个附加数据帧的第一列。像这样:
myList <- list(unique(df[,1:ncol(df)),
unique(df[,2:ncol(df)),
unique(df[,3:ncol(df)))
我设法用 for 循环解决了这个问题:
myList <- list()
for (i in 1:(ncol(df) - 1)){
myList[[i]] <- unique(df[, i:ncol(df)])
}
但我想知道是否有更快、更优雅的方法来做到这一点。
【问题讨论】:
-
您可以随时隐藏它。 :)
sapply(1:(ncol(df)-1), FUN = function(x, nc, df) df[, x:nc], nc = ncol(df), df = df) -
谢谢!有用。小编辑:
sapply(1:(ncol(df)-1), FUN = function(x, nc, df) unique(df[, x:nc]), nc = ncol(df), df = df) -
将此添加为答案并在宽限期后接受。