我作为文件 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,)
但是,这似乎不起作用。有什么建议吗?
答案 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
来使用管道(%>%
)运算符来链接操作,以便您可以检查每个步骤的输出。