colMeans不在R工作

时间:2018-05-09 06:31:52

标签: r

我作为文件 Dummy.txt 的数据集如下

A|B|C|D
1|2|1.9|5
2.5|5|53|3
4|48|49|0.4
8|94|495|B6

(请注意第5行,第4栏中的文字字符)

我想获得每列的平均值(即A,B,C和D列)。

我使用的代码如下:

mydata_1 <- read.delim("Dummy.txt", skipNul = TRUE, sep = "|", header = FALSE, row.names = NULL)

mydata_1 <- as.numeric(as.character(mydata_1))

colMeans(mydata_1, na.rm = TRUE,)

但是,这似乎不起作用。有什么建议吗?

2 个答案:

答案 0 :(得分:7)

您需要设置header = TRUE以使A|B|C|D行用于列名,否则它们将作为值包含在内,并且所有列都将被解析为字符串列。

然后,传递stringsAsFactors = FALSE可防止D列变为因子,然后在转换为数字类型时,值“B6”将自动转换为NA。

mydata_1 <- read.delim("Dummy.txt", skipNul = TRUE, sep = "|", header = TRUE, 
                       row.names = NULL, stringsAsFactors = FALSE)

mydata_1[] <- lapply(mydata_1, as.numeric)
#> Warning message:
#> In lapply(mydata_1, as.numeric) : NAs introduced by coercion

colMeans(mydata_1, na.rm = TRUE)
#>       A       B       C       D 
#>   3.875  37.250 149.725   2.800 

语法mydata_1[] <- ...使mydata_1保持其数据框结构,即使在右侧返回列表。

答案 1 :(得分:1)

这里的问题是as.numeric(as.character(mydata_1))会返回[1] NA NA NA NA

我的建议是首先浏览所有列并使用sapply()强制类型,然后计算列的方法:

library(magrittr)

mydata_1 %>% 
  sapply(., function(col) as.numeric(as.character(col))) %>% 
  colMeans(na.rm = TRUE)

这将返回:

      A       B       C       D 
  3.875  37.250 149.725   2.800 

注意:我正在使用magrittr来使用管道(%>%)运算符来链接操作,以便您可以检查每个步骤的输出。