使用mutate从另一列的组中创建最小值的新列

问题描述 投票:0回答:1

我有一个数据帧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

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

r dplyr min mutate
1个回答
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 
© www.soinside.com 2019 - 2024. All rights reserved.