R:数据帧的条件组合

时间:2017-12-08 11:49:27

标签: r

我想根据以下数据框中的var - 列的组合创建数据框

data <- data.frame("var"=c("x", "y", "z", "xy", "xz"),
                   "val"=c("1", "2", "3", "4",  "5"))

expand.grid不同,我要求var中的组合不能多次包含每个字母。因此,结果数据框必须变为

dataRes <- data.frame("var"=c("x+y+z", "y+xz", "xy+z"),
                      "val"=c("6",     "7",    "7"))

这是第二个例子

data <- data.frame("var"=c("x", "y", "z", "xy", "xz", "yz"),
                   "val"=c("1", "2", "3", "4",  "5", "6"))

所需的输出是

dataRes <- data.frame("var"=c("x+y+z", "y+xz", "xy+z", "x+yz"),
                      "val"=c("6",     "7",    "7", "7"))

R中是否有通用函数,或者我只需要进行所有组合,然后进行字符串搜索以清除字母出现多次的所有组合?

1 个答案:

答案 0 :(得分:1)

这遵循你的建议,即进行所有组合,然后清除其中一个变量存在多次的组合:

x <- 3;y <- 2;z <- 4;vars <- c("x", "y", "z");oper <- c("+", "*")
combinations <- expand.grid(vars, oper, vars, oper,  vars)
combinations <- combinations[apply(combinations[c(1,3,5)], 1, FUN = anyDuplicated)==0, ]
pairs <- do.call(paste, c(combinations, sep=""))
result <- data.frame(expr = pairs, result = sapply(pairs, function(k) eval(parse(text = k))), row.names = 1:length(pairs))
result

我相对确定没有专门的命令。