将单个值分配给分组变量R

时间:2016-10-14 06:39:47

标签: r group-by dplyr

我有一个包含两个变量的data.frame。我需要通过var1对它们进行分组,并将var2中的每个x替换为该组中唯一的不同值。

例如:

   var1 var2
1     1    a
2     2    a
3     2    x
4     3    b
5     4    c
6     5    a
7     6    c
8     6    x
9     7    c
10    8    x
11    8    b
12    8    b
13    9    a

结果应该是:

   var1 var2
1     1    a
2     2    a
3     2    a <-
4     3    b
5     4    c
6     5    a
7     6    c
8     6    c <-
9     7    c
10    8    b <-
11    8    b
12    8    b
13    9    a

我确实设法解决了这个例子:

dat <- data.frame(var1=c(1,2,2,3,4,5,6,6,7,8,8,8,9), var2=c("a","a","x","b","c","a","a","x","c","x","b","b","a"))

dat %>% group_by(var1) %>% mutate(
  var2 = as.character(var2),
  var2 = ifelse(var2 == 'x',var2[order(var2)][1],var2))

但由于排序原因,这对我的实际数据不起作用:(

我需要另一种方法,我想到的事情就是明确检查“不是x”,但我没有找到解决方案。

任何帮助表示感谢!

1 个答案:

答案 0 :(得分:2)

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(df1)),按'var1'分组,我们得到'var2'不是'x',选择第一个观察并分配({{1 }}到'var2'。

:=

library(data.table) setDT(df1)[, var2 := var2[var2!='x'][1], var1]

dplyr