我有一列包含數字和非數字值。我想找到可以用它來代替非數字值的數值的平均值。這在R中怎麼做?計算R中具有非數值的列的平均值
回答
這取決於你的數據是什麼樣子。
它看起來像這樣嗎?
data = list(1, 2, 'new jersey')
然後,你可以
data.numbers = sapply(data, as.numeric)
,並得到
c(1, 2, NA)
,你可以找到與
mean(data.numbers, na.rm=T)
如果矢量實際上是一個因素,而不是一個字符,你會遇到問題(我昨天剛學會這個:)。試試:'as.numeric(as.factor(c(10,20,30)))'。 @adamleerich得到它是正確的,你必須首先將它包裝到'as.character'中。 –
平均說你的數據幀被命名爲df
和列你要 「修復」被稱爲df$x
。你可以做以下事情。
你必須不公正,然後轉換爲數字。這將爲您提供所有無法合併爲數字的字符串的NAs。
nums <- as.numeric(as.character(df$x))
正如裏奇棉指出,有一個「更有效,但很難記住」辦法因素轉換爲數字
nums <- as.numeric(levels(df$x))[as.integer(df$x)]
爲了得到平均,您使用mean()
但通過na.rm = T
m <- mean(nums, na.rm = T)
將均值賦值給所有的NA值。
nums[is.na(nums)] <- m
然後您可以替換舊數據,但我不推薦使用它。取而代之的是添加一個新列
df$new.x <- nums
有關將因子轉換爲數字的更好方法,請參閱R上的常見問題解答。 http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-do-I-convert-factors-to-numeric_003f –
這是我昨天寫的一個功能,用於對付非數字類型。我有一個data.frame每個列不可預知的類型。我想計算數字的手段,並保持一切不變。
colMeans2 <- function(x) {
# This function tries to guess column type. Since all columns come as
# characters, it first tries to see if x == "TRUE" or "FALSE". If
# not so, it tries to coerce vector into integer. If that doesn't
# work it tries to see if there's a ' \" ' in the vector (meaning a
# column with character), it uses that as a result. Finally if nothing
# else passes, it means the column type is numeric, and it calculates
# the mean of that. The end.
# browser()
# try if logical
if (any(levels(x) == "TRUE" | levels(x) == "FALSE")) return(NA)
# try if integer
try.int <- strtoi(x)
if (all(!is.na(try.int))) return(try.int[1])
# try if character
if (any(grepl("\\\"", x))) return(x[1])
# what's left is numeric
mean(as.numeric(as.character(x)), na.rm = TRUE)
# a possible warning about coerced NAs probably originates in the above line
}
你會使用它,像這樣:
apply(X = your.dataframe, MARGIN = 2, FUN = colMeans2)
緊湊的轉換:
vec <- c(0:10,"a","z")
vec2 <- (as.numeric(vec))
vec2[is.na(vec2)] <- mean(vec2[!is.na(vec2)])
as.numeric
將打印下面列出的警告消息,並且轉換非數字來NA
。
Warning message:
In mean(as.numeric(vec)) : NAs introduced by coercion
- 1. 計算具體數值的平均值
- 2. 計算每列的平均值,R
- 3. 計算非零值的平均值
- 4. 計算平均值的平均值
- 5. 尾均值的計算(平均)列
- 6. 計算數組列表的平均值?
- 7. Matlab - 計算非NaN幀的平均值
- 8. 從計算列平均值
- 9. C#Datatable:計算列中的平均值
- 10. 計算平均值?
- 11. 計算平均值?
- 12. 計算平均值
- 13. 如何使用R來計算每列數據的平均值?
- 14. 如何計算中的R值的平均值在循環
- 15. r函數來計算列表中的值的均值
- 16. R:如何使sapply計算平均值?
- 17. 計算數組中的平均值
- 18. 計算數組中的平均值
- 19. 如何計算MS reportviewer/rdlc中的平均計算平均值?
- 20. MySQL的 - 計算平均值
- 21. 在R中的列間計算平均值
- 22. 計算並寫入R中列的平均值和標準差
- 23. 根據第二列中的標記計算平均值R
- 24. 如何計算r中不同列的平均值?
- 25. 計算並返回列表中只有正值的平均值
- 26. 使用SAS計算具有缺失值的平均值
- 27. 在Python中用數據框計算平均值/平均值Pandas
- 28. ArrayIndexOutOfBoundsException從像素數組中計算平均值/平均值
- 29. 計算多個列的平均值
- 30. 計算3d陣列的日平均值
你能提供一個數據的例子嗎?你可以使用'dput'。由於您有混合的數據類型,我假設您使用的是包含字符或因子列的數據框。 – Anatoliy
@nikhil-將均值賦給所有缺失的值是一個可怕的想法,因爲它會人爲地減少方差並導致有偏差的估計。 – richiemorrisroe
@nikhil:如果你提供更多的上下文(樣本數據+它代表了什麼+你想達到什麼),那麼我們或許可以想到一個比直接替換更好的統計技術。 –