我想根据以下数据框中的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中是否有通用函数,或者我只需要进行所有组合,然后进行字符串搜索以清除字母出现多次的所有组合?
答案 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
我相对确定没有专门的命令。