【问题标题】:determine median of double column r确定双列 r 的中位数
【发布时间】:2017-10-31 02:52:08
【问题描述】:

我有以下数据集

> 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 

分别。我已经做了足够的研究,知道这些过程都不起作用,但我无法找到任何解决方法来找到这些数据点的中位数。有什么办法可以做到这一点?

【问题讨论】:

  • 将评论移至适当位置

标签: r dataframe double median


【解决方案1】:

根据?median

中位数(x, na.rm = FALSE, ...)

在哪里

x 已定义方法的对象,或数值向量 包含要计算其中位数的值。

如果是data.frame,则可以使用temp6[,1] 转换为vector。因为它是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"))

【讨论】:

  • 谢谢,这确实有效。可悲的是,毕竟我的中位数与预期结果相去甚远,所以我现在必须解决另一个问题。至少现在我知道如何正确地将我的 DF 列转换为可操作的向量。
  • @NickBohl 您也可以使用整洁的方法来提取median,如另一篇文章所示
  • @NickBohl 请检查您的数据集中是否有任何异常,例如Inf-Inf 等。
  • 遗憾的是我已经检查过了。我认为当我合并两个数据框并尝试过滤掉我需要的列时,我正在丢失所需的数据。问题是这两组非常大(两个对于 excel 来说很大)所以不可能检查我的任何步骤
  • @NickBohl 你可以使用all(is.finite(temp6[[1]]))
【解决方案2】:

dplyr::summarise 是另一种选择。

library(dplyr)
temp6 %>% 
  summarise(Median = median(`Arithmetic Mean`, na.rm = TRUE))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 2021-04-07
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多