【问题标题】:finding min values between rows in R (dplyr)在 R (dplyr) 中的行之间查找最小值
【发布时间】:2015-06-26 13:38:33
【问题描述】:

我在 R 中有这个数据框,其中 sum 列是 V1 和 V2 的总和, 我想做的是使用 mutate 函数(在 dplyr 中)创建一个新列(V4),该列取 V1 和 V2 之间的 MIN 值并将其除以总和。

   V1 V2 sum   
1  2  3  5  
2  2  4  6   
3  1  4  5  
4  5  3  8   
5  5  3  8   
6  3  2  5   

这就是我希望它最终的样子

  V1 V2 sum V4  
1  2  3  5  .4
2  2  4  6  .33
3  1  4  5  .2
4  5  3  8  .375
5  5  3  8  .375
6  3  2  5  .4 

或者,如果您知道另一种更简单的方法,将不胜感激。 谢谢!

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:

    或者使用成对的最小值

    df <- data.frame(V1=c(2, 2, 1, 5, 5, 3),
                 V2=c(3, 4, 4, 3, 3, 2))
    
    library(dplyr)
    
    df %>% mutate(sum=V1+V2, V4=pmin(V1, V2)/sum)
    

    【讨论】:

      【解决方案2】:

      您正在寻找dplyr 中的rowwise 函数

      library(dplyr)
      
      df %>%
          rowwise() %>%
          mutate(V4 = min(V1, V2)/sum)
      
      Source: local data frame [6 x 4]
      Groups: <by row>
      
        V1 V2 sum        V4
      1  2  3   5 0.4000000
      2  2  4   6 0.3333333
      3  1  4   5 0.2000000
      4  5  3   8 0.3750000
      5  5  3   8 0.3750000
      6  3  2   5 0.4000000
      

      【讨论】:

        【解决方案3】:

        R 基本解决方案:

        within(df, {sum=V1+V2; V4=pmin(V1,V2)/sum})
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-03-28
          • 1970-01-01
          • 2013-11-22
          • 1970-01-01
          • 2018-03-20
          • 2014-03-07
          • 2020-09-17
          相关资源
          最近更新 更多