我正在使用 R 編程語言。假設我有以下資料(“my_data”):
student first_run second_run third_run fourth_run fifth_run sixth_run seventh_run eight_run ninth_run tenth_run
1 student1 19.70847 21.79771 16.49083 19.51691 13.97987 14.60733 13.89703 15.24651 20.75679 18.44020
2 student2 11.22369 15.36253 16.90215 20.20724 15.90227 15.14539 13.74945 18.30090 19.55124 17.24132
3 student3 15.93649 17.03599 14.20214 13.17548 14.70327 15.49697 13.08945 19.94142 22.41674 17.37958
4 student4 16.18733 15.13197 14.79481 16.75177 14.51287 17.71816 13.45054 14.25553 19.89091 18.88981
5 student5 18.71084 18.85453 17.15864 19.38880 15.68862 18.39169 15.26428 16.04526 18.92532 16.62409
6 student6 19.75246 12.74605 18.52214 17.92626 14.48501 17.20780 13.10512 12.46502 20.68583 15.87711
7 student7 14.75144 23.82376 18.51366 20.77424 14.22155 16.08186 12.95981 12.67820 20.12166 15.66006
8 student8 17.06516 15.63075 13.72026 15.02068 14.21098 15.99414 14.64818 16.15603 21.74607 17.07382
9 student9 20.27611 12.44592 12.26502 15.13456 14.61552 18.72192 15.11129 17.60746 18.83831 17.55257
10 student10 17.70736 16.21620 14.10861 17.20014 16.59376 19.50027 13.05073 15.80002 18.09781 18.34313
我想向此資料添加 2 列:
- my_mean : 每行的平均值
- my_median:每行的中位數
我在 R 中嘗試了以下代碼:
my_data$median = apply(my_data, 1, median, na.rm=T)
my_data$mean = apply(my_data, 1, mean, na.rm=T)
但我不認為這段代碼是正確的。例如,使用此代碼時,第二行資料的中位數回傳為“16.90215”
但是當我手動取這一行的中位數時:
median(11.22369 , 15.36253 , 16.90215 , 20.20724, 15.90227 , 15.14539 , 13.74945 , 18.30090 , 19.55124 , 17.24132)
我得到了一個答案
11.22
有人可以告訴我我做錯了什么嗎?
謝謝
uj5u.com熱心網友回復:
計算不正確,即的第一個引數median是“x”,它可以是一個向量。第二個引數是na.rm,后跟可變引數引數...。因此,當 write 時11.22369, 15.36253,將 'x' 視為11.22369回傳值。相反,它應該是串聯的向量c
median(c(11.22369 , 15.36253 , 16.90215 , 20.20724, 15.90227 , 15.14539 , 13.74945 , 18.30090 , 19.55124 , 17.24132))
[1] 16.40221
此外,根據 OP 的資料,應該洗掉第一列,即字符或因子
apply(my_data[-1], 1, median, na.rm=TRUE)
1 2 3 4 5 6 7 8 9 10
17.46551 16.40221 15.71673 15.65965 17.77517 16.54246 15.87096 15.81245 16.34356 16.89695
第二行用于manual計算
uj5u.com熱心網友回復:
library(dplyr)
df %>%
rowwise() %>%
mutate(median = median(c_across(where(is.numeric))),
mean = mean(c_across(where(is.numeric))))
c_across并且rowwise是為這種情況而創建的。大多數動詞按列作業。將此行為管道更改為rowwise第一個。
c_across然后將組合一行中的所有數字值(因此where(is.numeric)進入一個數字向量,然后mean或median可以應用。
注意:ungroup由于rowwise創建了一個按行分組的資料框,因此您可能希望將輸出通過管道傳輸到。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/340863.html
上一篇:使用管道在回圈內生成圖
下一篇:如何洗掉字母之間多余的空白字符?
