代码之家  ›  专栏  ›  技术社区  ›  Richard J. Acton

使用mutate创建一个新列,mutate是数据帧(dplyr)中每一行的一组指定列内容的函数。

  •  0
  • Richard J. Acton  · 技术社区  · 8 年前

    使用mutate创建一个新列,mutate是数据帧中每一行的一组指定列的内容的函数。

    这似乎是一项简单的任务,但我一直在努力寻找正确的语法,比如:

    df <- data.frame("annotations"=c("some","information","in","columns"),
               "X001"=c(124,435,324,123),
               "X002"=c(486,375,156,375)) 
    
    df %>% mutate(median=median(select(.,starts_with("X"))))
    

    所以我得到了原始数据框架,其中有一个新的列“中间值”,它在所有列中都有中间值,从每行的“x”开始。我想我可能需要一个 rowwise() 在那里的某个地方。

    我正在尝试将其安装到更大的dplyr管道中,因此我在“tidyverse”中寻找解决方案。

    2 回复  |  直到 8 年前
        1
  •  1
  •   IceCreamToucan    8 年前

    你可以 pmap X

    library(tidyverse)
    df %>% 
      mutate(median = pmap_dbl(select(., starts_with("X"))
                               , ~median(c(...))))
    

    或使用 apply

    df %>% 
      mutate(median = apply(select(., starts_with("X")), 1, median))
    
        2
  •  0
  •   Moh    8 年前

    另一种不包括使用dplyr的方法

    library(data.table)
    # columns starts with X
    df[,names(df) %like% "X"]
    
    # output
        X001 X002
     1  124  486
     2  435  375
     3  324  156
     4  123  375
    
    
    # get the median for each row using apply function
    apply(df[,names(df) %like% "X"], 1, median)
    #output - median of each row
    305 405 240 249 
    
    # store the results in a new column
    df$median = apply(df[,names(df) %like% "X"],1,median)
    
    # output
    annotations X001 X002 median
    1        some  124  486    305
    2 information  435  375    405
    3          in  324  156    240
    4     columns  123  375    249