如何修改 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)
我该如何编辑它?
(我可以通过这个最小的例子轻松地手动完成,但我的真实数据非常庞大,很难手动完成)
有几种方法,但效率都略低(尽管这可能是不可避免的)。
为所有人添加它,然后从 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
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
我做了一个小的、可重现的例子, 但是我的真实数据真的很大...而且有很多层次
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)
我该如何编辑它?
(我可以通过这个最小的例子轻松地手动完成,但我的真实数据非常庞大,很难手动完成)
有几种方法,但效率都略低(尽管这可能是不可避免的)。
为所有人添加它,然后从 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
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