【问题标题】:Create variables in R loop在 R 循环中创建变量
【发布时间】:2016-07-04 16:17:57
【问题描述】:

我正在尝试根据对照组 (dx=1) 的均值和标准差创建 z 评分变量。我想遍历我所有感兴趣的变量 (PCT:CST.L) 来创建这些 z 分数。我该怎么做?这是我的数据。

X    dx    PCT  CST.R  CST.L 
1 1 Control  15  30     5
2 2 Control  20  24     22
3 3 Clinical 25  20     14
4 4 Control  17  13     12
5 5 Clinical 14  12     11
6 6 Control  13  20     15

还有我希望它看起来像什么(至少是标题)。

X    dx    PCT  CST.R  CST.L  PCT_Z  CST.R_Z  CST.L_Z 
1 1 Control  15  30     5
2 2 Control  20  24     22
3 3 Clinical 25  20     14
4 4 Control  17  13     12
5 5 Clinical 14  12     11
6 6 Control  13  20     15

数据

structure(list(X = 1:6, dx = c("Control", "Control", "Clinical", 
"Control", "Clinical", "Control"), PCT = c(15L, 20L, 25L, 17L, 
14L, 13L), CST.R = c(30L, 24L, 20L, 13L, 12L, 20L), CST.L = c(5L, 
22L, 14L, 12L, 11L, 15L)), .Names = c("X", "dx", "PCT", "CST.R", 
"CST.L"), class = "data.frame", row.names = c("1", "2", "3", 
"4", "5", "6"))

【问题讨论】:

  • dd[, paste0(c("PCT","CST.R","CST.L"), '_Z')] <- scale(dd[, c("PCT","CST.R","CST.L")])
  • related 我没读好。您想获得对照组和临床组的 zscores 吗?我不知道你所说的dx=1 的平均值和 sd 是什么意思——单次观察没有 sd

标签: r


【解决方案1】:

我假设您要计算每列的 Z 分数。

Z 分数计算为(X - mean) / Standard deviationX 这里将是所选列中的每一行。

> df = data.frame(X = 1:6, 
+            dx = c("Control", "Control", "Clinical", "Control", "Clinical", "Control"), 
+            PCT = c(15L, 20L, 25L, 17L, 14L, 13L), 
+            CST.R = c(30L, 24L, 20L, 13L, 12L, 20L),
+            CST.L = c(5L, 22L, 14L, 12L, 11L, 15L))
> df
  X       dx PCT CST.R CST.L
1 1  Control  15    30     5
2 2  Control  20    24    22
3 3 Clinical  25    20    14
4 4  Control  17    13    12
5 5 Clinical  14    12    11
6 6  Control  13    20    15
> 
> colsToCalculate = colnames(df[, 3:5])
> newCols = c('PCT_Z', 'CST.R_Z', 'CST.L_Z')
> 
> for (i in seq(newCols)) {
+   data = df[, colsToCalculate[i]]
+   df[, newCols[i]] = (data - mean(data)) / sd(data)
+ }
> 
> df
  X       dx PCT CST.R CST.L       PCT_Z     CST.R_Z    CST.L_Z
1 1  Control  15    30     5 -0.51830527  1.50280954 -1.4675659
2 2  Control  20    24    22  0.59234888  0.61590555  1.5873672
3 3 Clinical  25    20    14  1.70300302  0.02463622  0.1497516
4 4  Control  17    13    12 -0.07404361 -1.01008510 -0.2096523
5 5 Clinical  14    12    11 -0.74043610 -1.15790243 -0.3893542
6 6  Control  13    20    15 -0.96256693  0.02463622  0.3294536
> 

【讨论】:

  • 这绝对是正确的方向,但是当我玩这个功能时,我的新列都说不适用。知道为什么会这样吗?
  • 我想通了!!谢谢!!
  • 可能是一些类型/类不一致...很高兴为您提供帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多