如何修改 r 中的组合 table(由 expand.grid() 函数生成)?

how to modify the combinations table (that made by expand.grid() function) in r?

我做了一个小的、可重现的例子, 但是我的真实数据真的很大...而且有很多层次

roomnumber <- c(1,2,3)

color <- c('red','blue','green')

weight <- c(0.1,0.3,0.5)

data <- expand.grid(roomnumber,color,weight)
names(data) <- c('roomnumber','color','weight')

所以,table如下。 它包含所有组合。

 roomnumber color weight
1           1   red    0.1
2           2   red    0.1
3           3   red    0.1
4           1  blue    0.1
5           2  blue    0.1
6           3  blue    0.1
7           1 green    0.1
8           2 green    0.1
9           3 green    0.1
10          1   red    0.3
11          2   red    0.3
12          3   red    0.3
13          1  blue    0.3
14          2  blue    0.3
15          3  blue    0.3
16          1 green    0.3
17          2 green    0.3
18          3 green    0.3
19          1   red    0.5
20          2   red    0.5
21          3   red    0.5
22          1  blue    0.5
23          2  blue    0.5
24          3  blue    0.5
25          1 green    0.5
26          2 green    0.5
27          3 green    0.5

然而,在这个数据中,我想要更多的东西。 当“颜色”变量为“蓝色”时, 我想添加更多组合

具体而言,此组合的权重为 0.1、0.3 或 0.5 但是当“颜色”为“蓝色”时,我希望权重为 0.1、0.3、0.5 和 0.7


weight_2 <- c(0.1, 0.3, 0.5, 0.7) 

我该如何编辑它?

(我可以通过这个最小的例子轻松地手动完成,但我的真实数据非常庞大,很难手动完成)

有几种方法,但效率都略低(尽管这可能是不可避免的)。

  1. 为所有人添加它,然后从 non-blue 行中删除 0.7

    data <- expand.grid(roomnumber = 1:3, color = c("red", "blue", "green"), weight = c(0.1, 0.3, 0.5, 0.7))
    data <- subset(data, color == "blue" | weight != 0.7)
    data
    #    roomnumber color weight
    # 1           1   red    0.1
    # 2           2   red    0.1
    # 3           3   red    0.1
    # 4           1  blue    0.1
    # 5           2  blue    0.1
    # 6           3  blue    0.1
    # 7           1 green    0.1
    # 8           2 green    0.1
    # 9           3 green    0.1
    # 10          1   red    0.3
    # 11          2   red    0.3
    # 12          3   red    0.3
    # 13          1  blue    0.3
    # 14          2  blue    0.3
    # 15          3  blue    0.3
    # 16          1 green    0.3
    # 17          2 green    0.3
    # 18          3 green    0.3
    # 19          1   red    0.5
    # 20          2   red    0.5
    # 21          3   red    0.5
    # 22          1  blue    0.5
    # 23          2  blue    0.5
    # 24          3  blue    0.5
    # 25          1 green    0.5
    # 26          2 green    0.5
    # 27          3 green    0.5
    # 31          1  blue    0.7
    # 32          2  blue    0.7
    # 33          3  blue    0.7
    
  2. rbind 额外 blue-only 行。

    data <- expand.grid(roomnumber = 1:3, color = c("red", "blue", "green"), weight = c(0.1, 0.3, 0.5))
    data <- rbind(data, expand.grid(roomnumber = 1:3, color = "blue", weight = 0.7))
    data
    #    roomnumber color weight
    # 1           1   red    0.1
    # 2           2   red    0.1
    # 3           3   red    0.1
    # 4           1  blue    0.1
    # 5           2  blue    0.1
    # 6           3  blue    0.1
    # 7           1 green    0.1
    # 8           2 green    0.1
    # 9           3 green    0.1
    # 10          1   red    0.3
    # 11          2   red    0.3
    # 12          3   red    0.3
    # 13          1  blue    0.3
    # 14          2  blue    0.3
    # 15          3  blue    0.3
    # 16          1 green    0.3
    # 17          2 green    0.3
    # 18          3 green    0.3
    # 19          1   red    0.5
    # 20          2   red    0.5
    # 21          3   red    0.5
    # 22          1  blue    0.5
    # 23          2  blue    0.5
    # 24          3  blue    0.5
    # 25          1 green    0.5
    # 26          2 green    0.5
    # 27          3 green    0.5
    # 28          1  blue    0.7
    # 29          2  blue    0.7
    # 30          3  blue    0.7