簡體   English   中英

R計算具有相同名稱的列的標准偏差

[英]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)))

這是一個用戶定義的功能,可能會有用。 您可能想檢查一下:

rowVars

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM