从R中的数据框子集

时间:2018-06-14 19:20:40

标签: r dataframe random subset

我已经采样了' n'来自名为nodes的数据框中的行:

nodes <- structure(list(node_number = 1:50, 
                        x = c(2L, 80L, 36L, 57L, 33L, 76L, 77L, 94L, 
                              89L, 59L, 39L, 87L, 44L, 2L, 19L, 5L, 
                              58L, 14L, 43L, 87L, 11L, 31L, 51L, 55L, 
                              84L, 12L, 53L, 53L, 33L, 69L, 43L, 10L, 
                              8L, 3L, 96L, 6L, 59L, 66L, 22L, 75L, 4L, 
                              41L, 92L, 12L, 60L, 35L, 38L, 9L, 54L, 1L), 
                        y = c(62L, 25L, 88L, 23L, 17L, 43L, 85L, 6L, 11L, 
                              72L, 82L, 24L, 76L, 83L, 43L, 27L, 72L, 50L, 
                              18L, 7L, 56L, 16L, 94L, 13L, 57L, 2L, 33L, 10L, 
                              32L, 67L, 5L, 75L, 26L, 1L, 22L, 48L, 22L, 69L,
                              50L, 21L, 81L, 97L, 34L, 64L, 84L, 100L, 2L, 9L, 59L, 58L), 
                        node_demand = c(3L, 14L, 1L, 14L, 19L, 2L, 14L, 6L, 
                                        7L, 6L, 10L, 18L, 3L, 6L, 20L, 4L, 
                                        14L, 11L, 19L,  15L, 15L, 4L, 13L, 
                                        13L, 5L, 16L, 3L, 7L, 14L, 17L, 
                                        3L, 3L, 12L, 14L, 20L, 13L, 10L, 
                                        9L, 6L, 18L, 7L, 20L, 9L, 1L, 8L, 
                                        5L, 1L, 7L, 9L, 2L)), 
                   .Names = c("node_number", "x", "y", "node_demand"), 
                   class = "data.frame", row.names = c(NA, -50L))

要示例我使用此代码:

hubs <- nodes[sample(1:total_nodes, hubs_required, replace = FALSE),]

返回:

node_number  x  y node_demand
33          33  8 26          12
14          14  2 83           6
42          42 41 97          20
13          13 44 76           3
10          10 59 72           6 

我想返回尚未被选中的所有行,以便我可以对它们执行一系列计算。

我认为使用像data[-sample,]这样的东西会起作用,但我收到以下错误

Error in xj[i] : invalid subscript type 'list'.

任何人都知道我可以获得这些价值观吗?

1 个答案:

答案 0 :(得分:2)

保留所选的索引列表会更容易。像

这样的东西
hubs <- nodes[keep <- sample(1:total_nodes, hubs_required, replace = FALSE),]
other_hubs <- nodes[-keep, ]

否则,如果您的数据有某种键/ ID,您可以执行类似

的操作
other_hubs <- nodes[nodes%node_number  %in%  hubs$node_number, ]

dplyr,这可以是反加入

nodes %>% anti_join(hubs, by="node_number")