按组r创建具有最小(第一)因子级别的列

时间:2016-06-20 03:01:51

标签: r dplyr r-factor

我有一个包含患者和预约信息的数据框。每位患者可能已经参加过多次预约。在每次预约时收集一些患者信息,结果是一些患者信息相互冲突而一些患者信息丢失。

我想根据其他约会记录的数据填写缺少的患者预约信息。并且(这是我被困的地方)我想采取最低限度的'对于同一患者的信息存在冲突的因素,记录水平(最早按水平排列)。 (在下面的示例中,因子级别按字母顺序排列,但情况并非如此)。

这类似于this question,但我使用的是因子而不是字符,而且我有多个因素我想要最小值,所以不能按行过滤。

例如。我有

df.have <- data.frame(
  grp_id = rep(1:3, each = 2),
  grpvar1 = factor(c("B", "A", "B", "C", NA, "A")),
  grpvar2 = factor(c("a", "b", "c", NA, NA, "x")),
  appt_id = 1:6)

我想要

grp_id grpvar1   grpvar2 appt_id
     1       A         a       1
     1       A         a       2
     2       B         c       3
     2       B         c       4
     3       A         x       5
     3       A         x       6

或至少

grp_id grpvar1 grpvar1.1
     1       A         a
     2       B         c
     3       A         x

1 个答案:

答案 0 :(得分:1)

我们可以尝试使用scanf(" %c", &again) ^ a space here scanf("\n%c", &again) Or remove \n from printf because you might not want cursor to go to next line 。因为我们需要第一个summarise_each&#39; grpvar&#39;在我们这样做之前,我们需要确保丢弃未使用的级别(使用level)。

droplevels

或者,如果我们使用df.have %>% group_by(grp_id) %>% summarise_each(funs(first(levels(droplevels(.)))), grpvar1:grpvar2) # grp_id grpvar1 grpvar2 # <int> <chr> <chr> #1 1 A a #2 2 B c #3 3 A x ,我们会得到第一个输出

mutate_each

如果我们需要输出为df.have %>% group_by(grp_id) %>% mutate_each(funs(levels(droplevels(.))[1]), grpvar1:grpvar2) # grp_id grpvar1 grpvar2 appt_id # <int> <chr> <chr> <int> #1 1 A a 1 #2 1 A a 2 #3 2 B c 3 #4 2 B c 4 #5 3 A x 5 #6 3 A x 6 列的&#39; grpvar&#39; s。

factor

或使用 df.have %>% group_by(grp_id) %>% mutate_each(funs(factor(levels(droplevels(.))[1])), grpvar1:grpvar2) # grp_id grpvar1 grpvar2 appt_id # <int> <fctr> <fctr> <int> #1 1 A a 1 #2 1 A a 2 #3 2 B c 3 #4 2 B c 4 #5 3 A x 5 #6 3 A x 6

data.table