gpt4 book ai didi

r - 如何给每一行中不等于最大值的那个赋值?

转载 作者:行者123 更新时间:2023-12-04 14:41:51 25 4
gpt4 key购买 nike

我有一个包含一些值的数据框。现在我想只保留每行中的最大值,并将 0 分配给其余列,如下所示:

df <-  data_frame(a= c(1,2,3,4,5),b= c(2,5,3,9,7),c= c(40,6,2,1,7))
df$rowmax <- apply(df,1,max)
#
a b c rowmax
<dbl> <dbl> <dbl> <dbl>
1 2 40 40
2 5 6 6
3 3 2 3
4 9 1 9
5 7 7 7
#ideal out put
a b c rowmax
0 0 40 40
0 0 6 6
3 3 0 3
0 9 0 9
0 7 7 7

有人可以帮我吗?谢谢 ; )

最佳答案

使用pmax获取行方向max可能会更有效,然后选择mutate_at中交集的列>替换每列中不等于0的值

library(dplyr)
library(purrr)
df %>%
mutate(rowmax = reduce(., pmax)) %>%
#or as @tmfmnk mentioned in the comments
# mutate(rowmax = exec(pmax, !!!.)) %>%
mutate_at(vars(a:c), ~ replace(., .!= rowmax, 0))
#Or do a multiplication
#mutate_at(vars(a:c), ~. * (.== rowmax))

此外,如果我们不需要 rowmax 列,则可以使用 base R 选项

df * (df == do.call(pmax, df))

关于r - 如何给每一行中不等于最大值的那个赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57272915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com