迭代向量并将该值用作数据帧的列

时间:2017-06-08 11:19:43

标签: r dataframe cbind

我正在使用for循环来标准化我的列中的数据。这里m_sel_cols是一个带有列名的向量。

for(i in m_sel_cols)
    {
        cal <- work_data1$i
        cal <- ((cal-mean(cal))/sd(cal))
    }

假设我的列名是&#34; A&#34;那你做的是:

  ...
        cal <- work_data1$A
  ...

我的数据集中的列数很大,我想将其转换回数据框,我知道可以使用cbind()但是for循环中的内容如何?

2 个答案:

答案 0 :(得分:3)

你可以&#34;循环&#34;使用sapply

xy <- data.frame(a = 1:3, b = 4:6, c = 7:9)
sapply(xy, FUN = function(x) (x - mean(x))/sd(x))

      a  b  c
[1,] -1 -1 -1
[2,]  0  0  0
[3,]  1  1  1

> scale(xy)
      a  b  c
[1,] -1 -1 -1
[2,]  0  0  0
[3,]  1  1  1
attr(,"scaled:center")
a b c 
2 5 8 
attr(,"scaled:scale")
a b c 
1 1 1 

答案 1 :(得分:0)

我们可以使用tidyverse

执行此操作
library(tidyverse)
xy %>%
     mutate_all(scale)
#   a  b  c
#1 -1 -1 -1
#2  0  0  0
#3  1  1  1

数据

xy <- data.frame(a = 1:3, b = 4:6, c = 7:9)