示例data.frame:
df <- data.frame(study = c('A', 'A', 'B', 'C', 'D', 'D'),
similarity = c(0.61, 0.58, -0.605, 0.4, 0.607, 0.3))
df
study similarity
1 A 0.610
2 A 0.580
3 B -0.605
4 C 0.400
5 D 0.607
6 D 0.300
我想以绝对similarity
命令,但要保持相同的学习价值。对于上面的示例,结果应为:
study similarity
1 A 0.610
2 A 0.580
5 D 0.607
6 D 0.300
3 B -0.605
4 C 0.400
答案 0 :(得分:2)
在基地R
df[order(-ave(df$similarity,df$study,FUN=function(x) max(abs(x))),df$study),]
study similarity
1 A 0.610
2 A 0.580
5 D 0.607
6 D 0.300
3 B -0.605
4 C 0.400
答案 1 :(得分:2)
data.table
解决方案:
library(data.table)
setDT(df)[order(-abs(similarity)), .SD, by = study]
<强>结果:强>
study similarity
1: A 0.610
2: A 0.580
3: D 0.607
4: D 0.300
5: B -0.605
6: C 0.400
答案 2 :(得分:1)
这是使用tidyverse的方法
library(tidyverse)
df %>%
group_by(study) %>% #group by study
mutate(arr = max(abs(similarity))) %>% #get maximum absolute similarity by group
ungroup() %>%
arrange(desc(arr)) %>% #arrange according to by group maximum absolute similarity
select(-arr) #leave the helper column out
#ouput
# A tibble: 6 x 2
study similarity
<fctr> <dbl>
1 A 0.610
2 A 0.580
3 D 0.607
4 D 0.300
5 B -0.605
6 C 0.400
答案 3 :(得分:0)
使用dplyr
的解决方案。此解决方案看起来比其他解决方案更复杂,但它的目的是生成预期输出,即使study
列不符合要求,或者来自不同similarity
组的study
中存在关联。< / p>
首先,计算每个相似度的绝对值(df2
)。
其次,计算每项研究的最大绝对值(df3
)。
第三,根据df3
中的顺序将研究列转换为因子列。根据{{1}}和绝对值(study
)
df4