我想知道是否有任何方法可以计算数据帧中的行的中位数。我了解存在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 <-中位数(...
答案 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_across
与 rowwise
函数一起使用,它允许使用 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