确定双列r的中位数

时间:2017-10-31 02:52:08

标签: r dataframe double median

我有以下数据集

> 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 

分别。我做了足够的研究,知道这些过程都不会起作用,但我找不到任何形式的解决方法来找到这些数据点的中位数。有没有办法让这种情况发生?

2 个答案:

答案 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))