我有一个包含两个变量的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”,但我没有找到解决方案。
任何帮助表示感谢!
答案 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