如何为数据帧的特定列创建一行 SD 值?

sum*_*mes 1 r standard-deviation

我有一个 160 x 250,000 的数据框。我想在 R 中找到除第一列(249,999 列)之外的所有列的 SD。是否可以执行此操作并添加一行 SD 值?这些是 DNA 甲基化的探针 β 值。

r2e*_*ans 5

使用mtcars

mt <- mtcars[1:5,]
rbind(mt, "Standard Deviation" = c(NA, sapply(mt[,-1], sd)))
#                    mpg cyl disp  hp drat   wt qsec   vs   am gear carb
# Mazda RX4           21 6.0  160 110 3.90 2.62 16.5 0.00 1.00 4.00  4.0
# Mazda RX4 Wag       21 6.0  160 110 3.90 2.88 17.0 0.00 1.00 4.00  4.0
# Datsun 710          23 4.0  108  93 3.85 2.32 18.6 1.00 1.00 4.00  1.0
# Hornet 4 Drive      21 6.0  258 110 3.08 3.21 19.4 1.00 0.00 3.00  1.0
# Hornet Sportabout   19 8.0  360 175 3.15 3.44 17.0 0.00 0.00 3.00  2.0
# Standard Deviation  NA 1.4  100  32 0.42 0.45  1.3 0.55 0.55 0.55  1.5
Run Code Online (Sandbox Code Playgroud)

解释:

  • sapply(mt[,-1], sd)sd对除第一列之外的每一列执行该函数mt[,-1]。因为这sapply和返回值都是相同的“形状”和类,所以这返回一个向量。
  • c(NA, ..)是因为我们没有第一列的标准开发,但由于我们是行绑定的,所以我们需要长度与 中的列数相同mt
  • rbind(mt, ..)是行绑定又名行连接。因为在本例中mtcars使用行名称来标识,所以我将 stddev 命名为"Standard Deviation". 这对于您的数据可能没有必要或不合适。