此问题已经回答here,但无法使其正常工作。
我这里有一个数据框,有兴趣根据 @Override
public void onBackPressed() {
super.onBackPressed();
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() == 1) {
//your code goes here
} else if (fm.getBackStackEntryCount() > 1) {
fm.popBackStack();
//your code goes here
} else {
fm.popBackStack();
//your code goes here
}
}
删除重复的行。检查列SYMBOL
以删除重复项。优先级为CALL
。如果P>A>M
保持P,A,M
,如果P
,请保留A,M
,否则A
。
M
我尝试了找到Here
的代码 SYMBOL INTENSITY CALL
1 DDR1 596.95050 P
2 RFC2 420.28708 P
3 HSPA6 510.73254 P
4 DDR1 1717.99487 A
5 GUCA1A 121.53488 A
6 UBA7 1810.49780 P
7 UBA7 301.51944 M
8 GUCA1A 34.53987 A
9 CCL5 5966.24609 P
10 CYP2E1 95.15707 A
11 CYP2E1 164.95276 M
12 ESRRA 1024.88745 P
13 CYP2A6 502.48877 A
14 GAS6 921.70923 P
15 MMP14 524.96863 A
16 GAS6 3069.48462 P
17 FNTB 266.77686 A
18 PLD1 187.65569 A
19 PLD1 1891.04541 P
20 PLD1 258.79028 M
但我删除了第二列library(data.table)
setDT(df)[, list(CALL=CALL[which.min(factor(CALL, levels=c('P', 'A', 'M')))]),
.(SYMBOL)]
。任何帮助,请确保代码也是最快的。感谢
预期产出
INTENSITY
答案 0 :(得分:4)
您可以使用order
(在i
位置)订购" CALL"通过按正确顺序指定的factor
转换为levels
的列,并对第一个观察(.SD[1L]
)进行分组,按“符号”分组
library(data.table)
setDT(df)[order(factor(CALL, levels=c('P', 'A', 'M'))),
.SD[1L], by = SYMBOL]
或者只是修改代码而不是list(CALL=..
,我们可以使用.SD
对行进行子集化。
setDT(df)[, .SD[which.min(factor(CALL, levels=c('P', 'A', 'M')))], .(SYMBOL)]
使用dplyr
的选项是
library(dplyr)
df %>%
group_by(SYMBOL) %>%
arrange(factor(CALL, levels=c('P', 'A', 'M'))) %>%
slice(1L)
或在which.min
slice
df %>%
group_by(SYMBOL) %>%
slice(which.min(factor(CALL, levels=c('P', 'A', 'M'))))