我想知道是否有任何方法可以计算数据框中行的中位数。我知道函数 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
Run Code Online (Sandbox Code Playgroud)
无论如何我可以简化这个过程,所以它就像 DF$CM <-中值(...
小智 10
要计算 的中位数df,您可以执行以下操作
df$median = apply(df, 1, median, na.rm=T)
Run Code Online (Sandbox Code Playgroud)
小智 6
如果您想使用,您可以在这里dplyr找到一个示例,尤其是mpalanco 的答案。简而言之,在使用指示操作应按行应用(而不是默认情况下应用于整个数据框)后,您可以使用计算并命名现有列的选择的新列。查看有关每个函数的文档以了解更多详细信息。rowwisemutate
例如,
library(dplyr)
DF %>%
rowwise() %>%
mutate(CM = median(c(C1, C2, C3), na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)
将产生输出:
# 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
Run Code Online (Sandbox Code Playgroud)
只是更加灵活和更新一点。我们使用c_acrosswithrowwise函数,它允许使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8213 次 |
| 最近记录: |