[英]R calculate standard deviation for the columns with same names
我有一個快速的問題
我有一個帶有許多度量值列的數據框。 我想計算具有相同(標題)名稱的列的均值。.我使用下面的代碼(在stackoverflow中找到)。
例如,數據...
df <- data.frame(c(1, 2, 3, 4,5),
c(2, 3, 4,NA,2),
c(3, 4, 5,3,6),
c(3, 7, NA,3,6))
names(df) <- c("a", "b", "a", "b")
df <- sapply(split.default(df, names(df)), rowMeans, na.rm = TRUE)
結果是這樣的...
a b
2 2.5
3 5
4 4
3.5 3
5.5 4
這段代碼為我提供了具有相同(標題)名稱的列的平均值。
但是我也想要標准偏差。 我嘗試用rowSds替換rowMeans,但是沒有用。
任何想法如何使用相同的代碼來計算標准偏差和平均值?
基於您以前的方法的一個想法是執行以下操作
sapply(split.default(df, names(df)), function(x) apply(x, 1, sd, na.rm=TRUE))
# a b
# [1,] 1.4142136 0.7071068
# [2,] 1.4142136 2.8284271
# [3,] 1.4142136 NA
# [4,] 0.7071068 NA
# [5,] 0.7071068 2.8284271
請記住,由於不應該在大小為1
的樣本上評估sd
,因此返回了NAs
。
這應該工作:
df <- data.frame(c(1, 2, 3),
c(2, 3, 4),
c(3, 4, 5))
names(df) <- c("a", "b", "a")
sapply(split.default(df, names(df)), function(smaller_df) {
sapply(smaller_df, function(col) c(mean(col), sd(col)))
})
第一個sapply適用於split生成的每個data.frame,每個都將對應於一組具有相同名稱的列。 第二個適用於每個列。
如果要在給定名稱組合的列中獲取所有測量值的平均值和標准偏差,而不是作為單獨的樣本,則可以將內部sapply更改為:
sapply(list(unlist(smaller_df)), function(col) c(mean(col), sd(col)))
這是一個用戶定義的功能,可能會有用。 您可能想檢查一下:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.