mutate中缺少值

时间:2017-01-20 15:29:58

标签: r ggplot2 dplyr

我正在尝试创建一个“day_cent”变量,其中日期以每个ID的最大tn为中心。我写了下面的代码,但是“day_centtn”有大量看似随机的NA,我不明白如何填补空白。

df <- df %>% group_by(id) %>%
mutate(day_centtn = day - day[tn == max])

我的目标是绘制tn vs day_centtn,但此时会出现一个空白网格

p <- ggplot(df, aes(x=day_centtn, y=tn_frac, group=id))
p +  geom_line(aes(colour=id))  + geom_point() + 
xlim(-5,5) + geom_vline(xintercept = 0) + ylim(0,100)) 

id  day tn  max day_centtn tn_frac
1   0   NA  32  NA  NA
1   1   32  32  0   100
1   2   27  32  NA  84.375
1   3   13  32  NA  40.625
1   4   NA  32  NA  NA
1   5   9   32  NA  28.125
1   6   NA  32  NA  NA
1   7   9   32  NA  28.125
1   8   NA  32  NA  NA
1   9   NA  32  8   NA
1   10  NA  32  NA  NA
1   180 NA  32  NA  NA
2   0   NA  9   NA  NA
2   1   NA  9   NA  NA
2   2   NA  9   NA  NA
2   3   8   9   NA  88.8888889
2   4   6   9   -5  66.6666667
2   5   7   9   NA  77.7777778
2   6   7   9   NA  77.7777778
2   7   7   9   NA  77.7777778
2   8   NA  9   NA  NA
2   9   9   9   NA  100
2   10  7   9   1   77.7777778
3   0   14  1935-2  0.7235142
3   1   11671935NA  60.3100775
3   2   193519350   100
3   3   10391935NA  53.6950904
3   4   308 19352   15.9173127
3   5   112 1935NA  5.7881137
3   6   103 19354   5.3229974
3   7   76  1935NA  3.9276486
3   8   65  19356   3.3591731
3   9   48  1935NA  2.4806202
3   10  27  19358   1.3953488

非常感谢,Annemarie

1 个答案:

答案 0 :(得分:1)

我会首先添加一个列来评估tn是否等于max。在此评估函数中,您可以处理tn中的NA值。这很重要,因为将值与NA进行比较会返回NA(NA == 32返回NA)。

类似的东西:

df %>% 
mutate(is_max = ifelse(! is.na(tn), tn == max, FALSE) %>%
group_by(id) %>%
mutate(day_centtn = day - day[is_max])

但是,如果有多个tn值等于id组中的max,则此代码中会出现错误。 如果发生这种情况,这可能会起作用(虽然我没有测试过)。

mutate(day_centtn = day - day[is_max][1])