Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在比较R中的最大值的两列时如何排除值_R_Max - Fatal编程技术网

在比较R中的最大值的两列时如何排除值

在比较R中的最大值的两列时如何排除值,r,max,R,Max,我有两列:A和B,每列的值从1到7。我需要得到两列之间的最大值,不包括值7,我如何才能做到这一点?或者,如果A有7,则我保留B的值,这将为我提供更多服务,例如: A <- c(1,1,1,3,2,4,2,5,6,7) B <- c(7,3,6,7,4,1,6,7,3,4) df <- data.frame(A, B) Expected results: 1,3,6,3,4,4,6,5,6,4 A一个选项可以是: with(df, pmax(A * (A != 7), B

我有两列:A和B,每列的值从1到7。我需要得到两列之间的最大值,不包括值7,我如何才能做到这一点?或者,如果A有7,则我保留B的值,这将为我提供更多服务,例如:

A <- c(1,1,1,3,2,4,2,5,6,7)
B <- c(7,3,6,7,4,1,6,7,3,4)
df <- data.frame(A, B)

Expected results: 1,3,6,3,4,4,6,5,6,4 
A一个选项可以是:

with(df, pmax(A * (A != 7), B * (B != 7)))

 [1] 1 3 6 3 4 4 6 5 6 4
要处理缺少的值,请执行以下操作:

with(df, pmax(A * (A != 7), B * (B != 7), na.rm = TRUE))
还考虑到负值:

with(df, pmax(A * (A != 7)^NA, B * (B != 7)^NA, na.rm = TRUE))

更新特别感谢亲爱的@tmfmnk

也许有更好的方法来处理这个问题,但我突然想到用尽可能低的值(如0)替换每7个,这样就不会影响比较。它也适用于NA值

library(dplyr)
library(purrr)

A <- c(1,1,1,3,2,4,2,5,6,7)
B <- c(7,3,6,7,4,1,6,7,3,4)

df <- tibble(A, B)

df %>%
  mutate(across(everything(), ~ replace(., . == 7, 0))) %>%
  mutate(ResultColumn = pmap_dbl(., ~ max(c(...), na.rm = TRUE)))


# A tibble: 10 x 3
       A     B ResultColumn
   <dbl> <dbl>        <dbl>
 1     1     0            1
 2     1     3            3
 3     1     6            6
 4     3     0            3
 5     2     4            4
 6     4     1            4
 7     2     6            6
 8     5     0            5
 9     6     3            6
10     0     4            4

库(dplyr)
图书馆(purrr)

A
df$max以下是
tidyverse
示例:

library(tidyverse)
A <- c(1,1,1,3,2,4,2,5,6,7)
B <- c(7,3,6,7,4,1,6,7,3,4)
        
df <- data.frame(A,B)
        
df %>% 
  filter(A != 7, B != 7) %>% 
  transform(ResultColumn = pmax(A,B))
    
库(tidyverse)

使用
pmax的另一个基本R选项

> do.call(pmax, c(replace(df, df == 7, NA), na.rm = TRUE))
 [1] 1 3 6 3 4 4 6 5 6 4


我忘记了一件重要的事情,那就是我在一列中有带NA的值,而在另一列中我有一个3,例如,我需要保留3而不是NA。@tmfmnk谢谢你的注释,我使用它是因为
str_replace
只接受字符串。但由于
replace
这是可能的,所以您是对的。我编辑了我的代码。@AgustínDamiani我编辑了我的代码,以便它将
NA
s排除在外。我忘记了一件重要的事情,我在一列中有带NA的值,在另一列中有一个3,例如,我需要保留3,而不是NA
pmax()
有一个参数来处理缺失的值。看看更新后的帖子。它很有效,伙计!谢谢:)您不应该从比较中排除任何行。只要任何一行中有一个7,另一个值就会被自动选择。哦,我明白了,如果他们想做一些函数,我的代码就没有帮助了。我应该写一个通用的代码——但它已经由某人给出了,所以你可以编辑你的代码,不管是否已经有答案。因为每个答案都有它自己的价值。
> do.call(pmax, c(replace(df, df == 7, NA), na.rm = TRUE))
 [1] 1 3 6 3 4 4 6 5 6 4
> do.call(pmax, replace(df, df == 7, -Inf))
 [1] 1 3 6 3 4 4 6 5 6 4