我有以下数据集
> temp6
# A tibble: 120 x 1
Arithmetic Mean
<dbl>
1 0.96
2 2.09
3 0.57
4 0.66
5 0.92
6 0.60
7 0.40
8 0.42
9 0.27
10 0.47
# ... with 110 more rows
我非常需要此数据列的中位数,但显然当我尝试
时median(temp6, na.rm=TRUE)
我收到此错误消息:
Error in median.default(temp6, na.rm = TRUE) : need numeric data
如果我尝试将此数据转换为“数字”,则无效
as.numeric(temp6, na.rm=TRUE)
或
as.numeric(as.character(temp6)
给出:
Error: (list) object cannot be coerced to type 'double'
和
Warning message:
NAs introduced by coercion
分别。我做了足够的研究,知道这些过程都不会起作用,但我找不到任何形式的解决方法来找到这些数据点的中位数。有没有办法让这种情况发生?
答案 0 :(得分:2)
根据?median
中位数(x,na.rm = FALSE,......)
,其中
x已定义方法的对象或数字向量 包含要计算中位数的值。
如果是data.frame
,则可以使用vector
转换为temp6[,1]
。由于它是tibble
,我们需要[[
。假设我们使用[
temp6[,1]
# A tibble: 10 x 1
# `Arithmetic Mean`
# <dbl>
# 1 0.96
# 2 2.09
# 3 0.57
# 4 0.66
# 5 0.92
# 6 0.60
# 7 0.40
# 8 0.42
# 9 0.27
#10 0.47
它仍然是tibble
,使用[[
temp6[[1]]
#[1] 0.96 2.09 0.57 0.66 0.92 0.60 0.40 0.42 0.27 0.47
它会转换为vector
is.vector(temp6[[1]])
#[1] TRUE
现在,我们可以获得median
median(temp6[[1]], na.rm = TRUE)
#[1] 0.585
或使用$
median(temp6$`Arithmetic Mean`, na.rm = TRUE)
#[1] 0.585
temp6 <- structure(list(`Arithmetic Mean` = c(0.96, 2.09, 0.57, 0.66,
0.92, 0.6, 0.4, 0.42, 0.27, 0.47)), .Names = "Arithmetic Mean", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10"), class = c("tbl_df",
"tbl", "data.frame"))
答案 1 :(得分:2)
dplyr::summarise
是另一种选择。
library(dplyr)
temp6 %>%
summarise(Median = median(`Arithmetic Mean`, na.rm = TRUE))