数据框中每行最大值的比率(R)。

问题描述 投票:0回答:2

我有一个数据框,有点类似于下面的数据框(df)。我需要添加一个新的列,表示每行最大值的比率(=行中最大值除以行中所有值的总和)。输出的结果应该和df1类似。

df <- data.frame('x' = c(1, 4, 1, 4, 1), 'y' = c(4, 6, 5, 2, 3), 'z' = c(5, 3, 2, 3, 2))

df1 <- data.frame('x' = c(1, 4, 1, 4, 1), 'y' = c(4, 6, 5, 2, 3), 'z' = c(5, 3, 2, 3, 2), 'ratio' = c(0.5, 0.462, 0.625, 0.444, 0.5)

谢谢你!我有一个数据框,有点类似于df1。

r dataframe sum max
2个回答
0
投票

下面是一个解决方案,使用 dplyr:

df %>% 
  rowwise() %>% 
  mutate(max_value = max(x,y,z),
         sum_values = sum(x,y,z),
         ratio = max_value / sum_values) #%>% 
  #select(-max_value, -sum_values) #uncomment this line if you want to df1 as in your question

# A tibble: 5 x 6
      x     y     z max_value sum_values ratio
  <dbl> <dbl> <dbl>     <dbl>      <dbl> <dbl>
1     1     4     5         5         10 0.5  
2     4     6     3         6         13 0.462
3     1     5     2         5          8 0.625
4     4     2     3         4          9 0.444
5     1     3     2         3          6 0.5 

0
投票
library(tidyverse)
df %>% 
  rowwise() %>% 
  mutate(MAX = max(x,y,z, na.rm = TRUE ),
         SUM = sum(x,y,z,  na.rm = TRUE),
         ratio = MAX / SUM)

# A tibble: 5 x 6
      x     y     z   MAX   SUM ratio
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1     1     4     5     5    10 0.5  
2     4     6     3     6    13 0.462
3     1     5     2     5     8 0.625
4     4     2     3     4     9 0.444
5     1     3     2     3     6 0.5  

0
投票

另一个选择是: rowSumspmax

library(dplyr)
library(purrr)
df %>%
    mutate(ratio = reduce(., pmax)/rowSums(.))
#  x y z     ratio
#1 1 4 5 0.5000000
#2 4 6 3 0.4615385
#3 1 5 2 0.6250000
#4 4 2 3 0.4444444
#5 1 3 2 0.5000000

或在 base R

df$ratio <- do.call(pmax, df)/rowSums(df)

0
投票

其他解决方案

df$ratio <- apply(df, 1, function(x) max(x, na.rm = T) / sum(x, na.rm = T))
© www.soinside.com 2019 - 2024. All rights reserved.