【发布时间】:2020-05-22 20:06:46
【问题描述】:
假设如下数据框:
dfX <- data.frame('a' = c('A', 'A', 'B', 'B', 'B', 'C', 'C', 'D', 'D', 'D'),
'b' = c('c2', 'c2', 'c8', 'c8', 'c4', 'c7', 'c7', 'c9', 'c9','c9'),
'c' = c('f34', 'f34', 'm92', 'm92', 'm92', 'g22', 'g22', 'i41', 'i41', 'i41'),
'd' = c('Check', 'Check', 'Check', 'Check', 'UnCheck', 'Check', 'Check', 'Check', 'Check','Check'),
'val1' = c(54, '', 37, '', '', 51, '', 74, '', ''),
'val2' = c('', 59, '', 87, 84, '', 62, '', 27, 85))
dfX
a b c d val1 val2
1 A1 c2 f34 Check 54
2 A1 c2 f34 Check 59
3 A2 c8 m92 Check 37
4 A2 c8 m92 Check 87
5 A2 c4 m92 UnCheck 84
6 A3 c7 g22 Check 51
7 A3 c7 g22 Check 62
8 A4 c9 i41 Check 74
9 A4 c9 i41 Check 27
10 A4 c9 i41 Check 85
我想合并列val1 和val2 按列a, b, c 的等效值对它们进行分组,但是如果列d 显示'Uncheck',则应从结果数据框中删除该行.
最重要的是,如果每组的列中有多个值(例如行A4),则应仅保留重复列的最大值
到目前为止,我的目标是 dplyr 是这样的:(This post 作为源)
FuncX <- function(x) x[x != '']
dfY <- dfX %>%
group_by(a,b,c) %>%
summarise_each(funs(FuncX))
但是添加d 列和如果该列标记'Unchecked',那么它应该被删除的上述条件,我找不到解决方法。也未能仅将 A4 行的 max() 值作为输出
想要的输出应该是这样的:
dfY
a b c d val1 val2
1 A c2 f34 Check 54 59
2 B c8 m92 Check 37 87
3 C c7 g22 Check 51 62
4 D c9 i41 Check 74 85
【问题讨论】: