【发布时间】:2017-11-23 11:40:41
【问题描述】:
我的 df 有个小问题。首先,我将向您展示一个示例,然后说明我想收到什么。
我的输入df:
C1 C2 C3 C4 C5 C6 C7 C8
A I I D X I I I
A I I I X D I I
A I I I X I I I
A I D I X NC I I
B D D I X I I I
B D I NC X I I D
C NC I I X NC D I
C I I I X I I I
C I I I X I I D
D NC NC I X D D D
D I I I X D D I
D D D I X I I NC
D I I I X NC I I
E NC I I X I I D
E I I I X I D D
想要的结果:
C1 C2 C3 C4 C5 C6 C7 C8
A I I D X I I I
A I I I X D I I
A I I I X I I I
A I D I X NC I I
我希望只有组 (group by column 'C1')(所有行)在每行组中至少 2 次出现 'I'(让我们以 @987654325 @) 在组列中 C2, C3, C4 和 C6, C7, C8。
我决定使用filter()、all() 和rowSums()
df_filtered <- df %>%
group_by(C1) %>%
filter(all(rowSums(df[,2:4] == 'I' & df[,6:8] == 'I') >= 2))
什么不起作用?它返回 0 行,不知道为什么......
【问题讨论】:
-
为什么要排除
C-rows 8 和 9,以及E-row 14?他们在组列C2, C3, C4和C6, C7, C8中也至少有2 个I。 -
如果
C2, C3, C4或C6, C7, C8列中有一个或更少的I,尽管在一行中,整个组都被丢弃。C组在第 7 行,C6, C7列中有NC和D。如果我们使用I而不是NC或D或两者兼而有之,则整个组都应该通过过滤器。