使用另一列的group by minumum值创建新列

时间:2017-12-16 22:19:08

标签: r dplyr min mutate

我有一个数据帧df,并希望按第二列的组的最小值填充新列。以前的帖子不会在创建新列的上下文中解决此问题,同时保留数据帧的原始行和列。

假设此示例输入:

a <- c(1,1,1,1,2,2,2,2)
b <- c(NA,1,2,2,3,5,6,NA)  
df <- data.frame(a,b)
df

a   b
1   NA          
1   1           
1   2           
1   2           
2   3           
2   5           
2   6           
2   NA          

我想要实现的是这个输出:

a   b   Min_b
1   NA  1           
1   1   1           
1   2   1           
1   2   1           
2   3   3           
2   5   3           
2   6   3           
2   NA  3       

以下是我对相应输出的尝试:

df %>% group_by(a) %>% mutate(Min_b = min(b, na.rm = TRUE))

a   b   Min_b
1   NA  1           
1   1   1           
1   2   1           
1   2   1           
2   3   1           
2   5   1           
2   6   1           
2   NA  1       

上面给出了b列的最小值,而不是列a的组b的最小值(即,我想要后者)。

df %>% group_by(a) %>% top_n(-1, wt = b)

a   b
1   1
2   3

上述工作用于找到正确的值但似乎不能在mutate中工作,如下所示:

df1 %>% group_by(a) %>% mutate(Min_of_b = top_n(-1, wt = b))

Error in is_scalar_integerish(n) : argument "n" is missing, with no default

感谢您提供有关替代方法的任何建议!

1 个答案:

答案 0 :(得分:0)

我弄清楚了我的错误。我可能在加载dplyr后加载了plyr,这使得group_by工作不正常。为了解决这个问题,我按照以下方式分离了plyr:

detach(package:plyr)

我的group_by然后正常工作,使用以下代码(给出相同的数据框):

df %>% group_by(a) %>% mutate(Min_b = min(b, na.rm = TRUE))

a   b   Min_b
1   NA  1           
1   1   1           
1   2   1           
1   2   1           
2   3   3           
2   5   3           
2   6   3           
2   NA  3