expand.grid,每列有单独的变量

Mic*_*hel 2 combinations r

我想data.frame在R中实现以下功能:

    i1   i2   i3
1   A1   A2   A3
2   No   A2   A3
3   A1   No   A3
4   No   No   A3
5   A1   A2   No
6   No   A2   No
7   A1   No   No
8   No   No   No
Run Code Online (Sandbox Code Playgroud)

在每列中,变量可以是连接字符串"A"和列号或"否".本data.frame应包含所有可能的组合.

我的想法是使用expand.grid,但我不知道如何list动态创建.还是有更好的方法?

expand.grid(list(c("A1", "No"), c("A2", "No"), c("A3", "No")))
Run Code Online (Sandbox Code Playgroud)

Dav*_*urg 6

我想你可以创建自己的辅助函数,就像那样

MyList <- function(n) expand.grid(lapply(paste0("A", seq_len(n)), c, "No"))
Run Code Online (Sandbox Code Playgroud)

然后简单地传递元素的数量(例如,3)

MyList(3)
#   Var1 Var2 Var3
# 1   A1   A2   A3
# 2   No   A2   A3
# 3   A1   No   A3
# 4   No   No   A3
# 5   A1   A2   No
# 6   No   A2   No
# 7   A1   No   No
# 8   No   No   No
Run Code Online (Sandbox Code Playgroud)

或者,你也可以尝试相当于一个比一个大的效率更高效data.tableCJ等价物expand.gridn

library(data.table)
DTCJ <- function(n) do.call(CJ, lapply(paste0("A", seq_len(n)), c, "No"))
DTCJ(3) # will return a sorted cross join
#    V1 V2 V3
# 1: A1 A2 A3
# 2: A1 A2 No
# 3: A1 No A3
# 4: A1 No No
# 5: No A2 A3
# 6: No A2 No
# 7: No No A3
# 8: No No No
Run Code Online (Sandbox Code Playgroud)