2017-06-22 75 views
0

我想围绕整个列的平均值中心值。我需要为整个(大)数据框完成此操作,所以首先我尝试了colMeans。使用不同的函数时得到不同的答案为相同的数学,不知道为什么

colMeans(data, na.rm = TRUE)

由此,我得到这样的5.567为我的数据集的第一列的答案。不过,我想仔细检查一下。当我使用平均函数 mean(data$first_column, na.rm = TRUE)时,我得到了8.466。当我计算Excel表中的平均值时,我得到了6.5左右的数据。

我一直无法用生成的数据集重新创建这个问题,所以这里是一个 link to a GoogleDoc with the first two columns of my data set

最终目标是围绕数据集中几乎每一列的均值的中心值,并且我假设我会用lapply()来做到这一点。但在我这样做之前,我想了解为什么我会得到这么多不同的平均值。我认为它与NAs或什么有关,但我不太明白。

在此先感谢您的帮助。

+0

我无法重新创建您的错误。我下载了谷歌文档作为CSV文件,并得到了使用colmeans和mean的6.502439。 –

+0

尝试在数据框上使用'complete.cases()',以便所有的NA都被删除。 'data < - data [complete.cases(data),]' – sweetmusicality

+0

我同意@IanWesley。问题不可重现; 6.502439是'Irritability'的平均值 –

回答

0

经过很多尝试,这里是我有的代码。我仍然得到的平均值已关闭,但colMeans()mean()都产生相同的答案,所以我认为它与变量NA有关,而不是函数。我仍在研究这个问题,但我想出了如何用平均值代替NAs,同时围绕平均值的其他值集中。 This post helped me figure it out, specifically @Itsa's code

###center values first

center_asd_prep <- autgi %>% select(ID, Irritability, Other_Variables)

as.numeric(center_asd_prep$srs_tot_raw) -> center_asd_prep$srs_tot_raw

center_asd_mean <- center_asd_prep %>% select(-ID, -Group.y) #remove categorical info

#replacing NA with mean while centering other values around the mean center_asd_mean[] <- lapply(center_asd_mean, function(x) ifelse(is.na(x), mean(x, na.rm = TRUE), x))

#adding ID info back center_asd <- data.frame(center_asd_mean, ID = center_asd_prep$ID, Group = center_asd_prep$Group.y) center_asd

我会更新这篇文章,如果我找出为什么我得到如此高的平均值,但我有14个观察具有大量的NAs,我认为这影响了结果,因为我的N = 218 。假设,如果有人遇到与我一样的问题,此代码应该可以工作。

相关问题