使用group_by时重新排序NA的位置

ste*_*sou 4 r dataframe na dplyr tibble

我想在一列中,在另一个分类变量的每个级别内重新排列NA的位置.例如,使用此数据框:

df <- data.frame(fact=c(1,1,1,2,2,2), id=rep(1:6), value=c(NA,44,23,NA,NA,76))
Run Code Online (Sandbox Code Playgroud)

我想改变一个新的列,如:

df$newvar <= c(44,23,NA,76,NA,NA)
Run Code Online (Sandbox Code Playgroud)

我原以为以下方法可行,但不会:

dfb <- df %>% group_by(fact) %>% mutate(newvar = df$value[order(is.na(df$value))])
Run Code Online (Sandbox Code Playgroud)

有关如何做到这一点的任何想法?

Flo*_*ian 5

您应该删除df$mutate语句中的部分,否则您指的是完整列,而不是每个组的列.所以这应该工作正常:

df %>% group_by(fact) %>% mutate(newvar = value[order(is.na(value))])
Run Code Online (Sandbox Code Playgroud)

输出:

# A tibble: 6 x 4
# Groups: fact [2]
   fact    id value newvar
  <dbl> <int> <dbl>  <dbl>
1  1.00     1  NA     44.0
2  1.00     2  44.0   23.0
3  1.00     3  23.0   NA  
4  2.00     4  NA     76.0
5  2.00     5  NA     NA  
6  2.00     6  76.0   NA  
Run Code Online (Sandbox Code Playgroud)