![](/img/trans.png)
[英]Using the na.rm = TRUE option in the function for summary stats - summary()
[英]Using Na.RM = TRUE in a created Function
我正在嘗試計算一些數據的 SEM,但由於存在 NA,我無法讓它工作。 這是我的代碼:
sem <- function(x, na.rm = TRUE) sd(x, na.rm = TRUE)/sqrt(length(x, na.rm = TRUE), na.rm = TRUE) #making a SEM function
allbox.rptr %>%
group_by(Trait, Time) %>%
summarize(Mean_R = mean(R, na.rm = TRUE), SEM = sem(R, na.rm = TRUE))
這是我正在使用的數據:
dput(allbox.rptr)
structure(list(ID = c("R3L12", "R3L12", "R3L12", "R3L12", "R3L12",
"R3L12", "R3L12", "R3L1", "R3L1", "R3L1", "R3L1", "R3L1", "R3L1",
"R3L1", "R3L2", "R3L2", "R3L2", "R3L2", "R3L2", "R3L2", "R3L2",
"R3L4", "R3L4", "R3L4", "R3L4", "R3L4", "R3L4", "R3L4", "R8L1",
"R8L1", "R8L1", "R8L1", "R8L1", "R8L1", "R8L1", "R3L9", "R3L9",
"R3L9", "R3L9", "R3L9", "R3L9", "R3L9", "R3L8", "R3L8", "R3L8",
"R3L8", "R3L8", "R3L8", "R3L8", "R3L11", "R3L11", "R3L11", "R3L11",
"R3L11", "R3L11", "R3L11", "R8NAT123", "R8NAT123", "R8NAT123",
"R8NAT123", "R8NAT123", "R8NAT123", "R8NAT123", "R8L4", "R8L4",
"R8L4", "R8L4", "R8L4", "R8L4", "R8L4", "R4L8", "R4L8", "R4L8",
"R4L8", "R4L8", "R4L8", "R4L8"), Trait = c("ACC", "ACC", "Tb",
"Tb", "HR", "HR", "Perc.Active", "ACC", "ACC", "Tb", "Tb", "HR",
"HR", "Perc.Active", "ACC", "ACC", "Tb", "Tb", "HR", "HR", "Perc.Active",
"ACC", "ACC", "Tb", "Tb", "HR", "HR", "Perc.Active", "ACC", "ACC",
"Tb", "Tb", "HR", "HR", "Perc.Active", "ACC", "ACC", "Tb", "Tb",
"HR", "HR", "Perc.Active", "ACC", "ACC", "Tb", "Tb", "HR", "HR",
"Perc.Active", "ACC", "ACC", "Tb", "Tb", "HR", "HR", "Perc.Active",
"ACC", "ACC", "Tb", "Tb", "HR", "HR", "Perc.Active", "ACC", "ACC",
"Tb", "Tb", "HR", "HR", "Perc.Active", "ACC", "ACC", "Tb", "Tb",
"HR", "HR", "Perc.Active"), Time = c(5, 30, 5, 30, 5, 30, 60,
5, 30, 5, 30, 5, 30, 60, 5, 30, 5, 30, 5, 30, 60, 5, 30, 5, 30,
5, 30, 60, 5, 30, 5, 30, 5, 30, 60, 5, 30, 5, 30, 5, 30, 60,
5, 30, 5, 30, 5, 30, 60, 5, 30, 5, 30, 5, 30, 60, 5, 30, 5, 30,
5, 30, 60, 5, 30, 5, 30, 5, 30, 60, 5, 30, 5, 30, 5, 30, 60),
R = c(0.119, 0.161, 0.22, 0.204, 0.098, 0.082, 0.252, 0.125,
0.171, 0.398, 0.348, 0.332, 0.266, 0.213, 0.199, 0.293, 0.419,
0.463, 0.31, 0.308, 0.343, 0.118, 0.161, 0.401, 0.495, 0.228,
0.293, 0.123, 0.041, 0.028, 0.188, 0.146, 0.268, 0.275, 0.006,
0.025, 0.036, 0.192, 0.194, 0.174, 0.136, 0.072, NA, NA,
0.138, 0.128, 0.375, 0.339, NA, 0.099, 0.16, 0.106, 0.08,
0.079, 0.074, 0.069, 0.207, 0.261, 0.723, 0.56, 0.545, 0.431,
0.109, 0.172, 0.249, 0.177, 0.117, 0.142, 0.158, 0.296, 0.108,
0.159, 0.099, 0.105, 0.101, 0.127, 0.212), SE = c(0.05, 0.071,
0.084, 0.082, 0.047, 0.047, 0.091, 0.05, 0.07, 0.096, 0.097,
0.092, 0.084, 0.09, 0.08, 0.111, 0.116, 0.127, 0.098, 0.101,
0.134, 0.047, 0.067, 0.098, 0.108, 0.072, 0.086, 0.067, 0.023,
0.026, 0.072, 0.06, 0.094, 0.092, 0.031, 0.019, 0.032, 0.071,
0.077, 0.067, 0.062, 0.057, NA, NA, 0.054, 0.054, 0.106,
0.098, NA, 0.046, 0.078, 0.047, 0.04, 0.035, 0.039, 0.053,
0.073, 0.087, 0.101, 0.119, 0.116, 0.117, 0.143, 0.07, 0.098,
0.068, 0.05, 0.059, 0.063, 0.114, 0.043, 0.064, 0.039, 0.039,
0.038, 0.049, 0.082)), row.names = c(NA, -77L), class = c("tbl_df",
"tbl", "data.frame"))
當我運行代碼時,這是我得到的錯誤:
Error: Problem with `summarise()` column `SEM`.
ℹ `SEM = sem(R, na.rm = TRUE)`.
x 2 arguments passed to 'length' which requires 1
ℹ The error occurred in group 1: Trait = "ACC", Time = 5.
Run `rlang::last_error()` to see where the error occurred.
任何幫助將不勝感激,謝謝!
在 OP 的sem
function 中,將na.rm
參數添加到沒有該參數的函數中。 相反,它可以是邏輯向量( .is.na(x)
)的sum
,它給出列中非 NA 元素的數量(或者也可以是length(x[.is.na(x)])
)
sem <- function(x, na.rm = TRUE) sd(x, na.rm = TRUE)/sqrt(sum(!is.na(x)))
現在,我們應用代碼
library(dplyr)
allbox.rptr %>%
group_by(Trait, Time) %>%
summarize(Mean_R = mean(R, na.rm = TRUE),
SEM = sem(R, na.rm = TRUE), .groups = 'drop')
-輸出
# A tibble: 7 × 4
Trait Time Mean_R SEM
<chr> <dbl> <dbl> <dbl>
1 ACC 5 0.121 0.0190
2 ACC 30 0.168 0.0275
3 HR 5 0.241 0.0432
4 HR 30 0.226 0.0352
5 Perc.Active 60 0.170 0.0348
6 Tb 5 0.278 0.0570
7 Tb 30 0.258 0.0530
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.