R如何获取数据框中的行中位数

时间:2019-01-25 13:47:30

标签: r median

我想知道是否有任何方法可以计算数据帧中的行的中位数。我了解存在rowmeans函数,但是我不相信有行中位数函数。我想将结果存储在数据框中的新列中。这是我的例子

我试图上网。提到行中位数,但是我在R中找不到函数。

 C1<-c(3,2,4,4,5)
   C2<-c(3,7,3,4,5)
   C3<-c(5,4,3,6,3)
   DF <- data.frame(ID=c("A","B","C","D","E"),C1=C1,C2=C2,C3=C3)

   DF 


  # This is as far as I have gotten, but not streamlined

  MA <- median(C(3, 3, 5). na.rm = T)   # A
  MB <- median(C(2, 7, 4). na.rm = T)   # B
  MC <- median(C(4, 3, 3). na.rm = T)   # C
  MD <- median(C(4, 4, 6). na.rm = T)   # 4
  ME <- median(C(5, 5, 3). na.rm = T)   # E

  CM <- c(MA, MB, MC, MD, ME)C1<-c(3,2,4,4,5)


   ID C1 C2 C3
  1  A  3  3  5
  2  B  2  7  4
  3  C  4  3  3
  4  D  4  4  6
  5  E  5  5  3

   ID C1 C2 C3  CM
  1  A  3  3  5
  2  B  2  7  4
  3  C  4  3  3
  4  D  4  4  6
  5  E  5  5  3

无论如何,我可以简化流程吗,就像DF $ CM <-中位数(...

3 个答案:

答案 0 :(得分:1)

df $ median = apply(df,1,中位数,na.rm = T)

答案 1 :(得分:0)

如果您想使用dplyr,则可以找到示例here,尤其是mpalanco's的答案。简要地说,在使用rowwise指示应按行(而不是默认情况下应用于整个数据帧)应用操作之后,可以使用mutate来计算和命名新的列。现有列的选择。有关每个功能的更多信息,请查看文档。

例如,

library(dplyr)

DF %>% 
  rowwise() %>% 
  mutate(CM = median(c(C1, C2, C3), na.rm = TRUE))

将产生输出:

# A tibble: 5 x 5
  ID       C1    C2    C3    CM
  <fct> <dbl> <dbl> <dbl> <dbl>
1 A         3     3     5     3
2 B         2     7     4     4
3 C         4     3     3     3
4 D         4     4     6     4
5 E         5     5     3     5

答案 2 :(得分:0)

更加灵活和最新。我们将 c_acrossrowwise 函数一起使用,它允许使用 tidy-select 语义。这里我们选择 where 来指定我们只希望数值列计算中位数。

library(dplyr)

DF %>%
  rowwise() %>%
  mutate(med = median(c_across(where(is.numeric)), na.rm = TRUE))

# A tibble: 5 x 5
# Rowwise: 
  ID       C1    C2    C3   med
  <chr> <dbl> <dbl> <dbl> <dbl>
1 A         3     3     5     3
2 B         2     7     4     4
3 C         4     3     3     3
4 D         4     4     6     4
5 E         5     5     3     5
相关问题