我有一个数据帧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
感谢您提供有关替代方法的任何建议!
答案 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