在R中查找ID组

时间:2018-01-20 04:59:25

标签: r

我的数据集包含两个ID'列:当前ID的一列var tasks = ["None"] @IBOutlet weak var taskonelabel: UILabel! @IBAction func taskbutton(_ sender: UIButton) { tasks.append("Do Your Homework") print(tasks) if tasks.count > 2{ taskonelabel?.text = String(tasks[1]) } print(taskonelabel) ,以及将观察(行)与另一个观察点["None", "Do Your Homework"]连接起来的另一列id

示例数据

prev_id

在上面的示例中,第一个观察(35,10)表示它连接到第8行(10,4),第8行连接到第2行(4,3),最后连接到第3行( 3,NA)。第3行中id的NA表示该行未连接到另一个观察点。

问题

如何创建另一个字段d <- data.frame( id = c(35, 4, 3, 9, 5, 17, 11, 10, 8), prev_id = c(10, 3, NA, 5, NA, NA, 8, 4, NA) ) id prev_id 1 35 10 2 4 3 3 3 NA 4 9 5 5 5 NA 6 17 NA 7 11 8 8 10 4 9 8 NA ,为每个观察集合提供唯一标识符?

期望的结果

prev_id

1 个答案:

答案 0 :(得分:0)

此解决方案假定存在解决方案。

我们不知道每个链的起点在哪里。但是,我们知道每个链的结尾都是prev_idNA

library('tidyverse')

d <- data.frame(
  id = c(35, 4, 3, 9, 5, 17, 11, 10, 8),
  prev_id = c(10, 3, NA, 5, NA, NA, 8, 4, NA)
)

首先,为链端设置id_group

group_df <- d %>%
  filter(is.na(prev_id)) %>%
  mutate(id_group = row_number()) %>%
  right_join(d)
group_df
#>   id prev_id id_group
#> 1 35      10       NA
#> 2  4       3       NA
#> 3  3      NA        1
#> 4  9       5       NA
#> 5  5      NA        2
#> 6 17      NA        3
#> 7 11       8       NA
#> 8 10       4       NA
#> 9  8      NA        4

然后,根据id_group的{​​{1}}迭代更新id_group。继续前进,直到不再缺少prev_id s。

id_group