如何修改组合表(即由expand.grid()函数)在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')

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

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. 全部添加,然后从非蓝色行中删除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额外的纯蓝色行。

    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
    

最新更新