向数据框添加新列,为每个列提供循环中的不同名称

时间:2018-01-28 15:41:14

标签: r

这里我有一个数据帧和向量

input.addEventListener('keydown', (e) => {if (e.keyCode == 13) doSomething()});

以上是我的数据框,我发现属性的相关性,如(mpg,spd),(mpg,wt),(mpg,ast),(mpg,alp),(spd,wt)等等。 nC2迭代,需要将这些值附加到新数据框中具有特定名称的新列

names  mpg   spd   wt  ast   alp
c1     0.34  12    34   43   2
c2     0.56  34    98   23   10
c1     0.9   847   43   23   20
c3      NA   234    34  34    45
c4      34    87    32   23   87 
c5      89    98    98   NA    NA

这里我想在vector中添加名称的新列,并将值附加到b中 我想要的ouptut:

vec=c('c1','c2','c4','c5')
 for(i in 1:length(vec))
    { 

    tb=cbind(p1,p2)  #p1,p2 are data frames attributes for correlation eg:contains characters
    tb[,ncol(tb)+1]=b #b is a dataframe which have stored correlation values of attributes
    names(tb)[,ncol(tb)+1]=vec[i]  
    }

1 个答案:

答案 0 :(得分:1)

假设您已有一些数据帧:

x <- data.frame(numeric(1000))

您可以使用其list语法在循环中添加更多带名称的列。毕竟data.frame是特殊列表。

> is.list(x)
[1] TRUE

您可以在for循环中添加更多列,如下所示:

vec=c('c1','c2','c4','c5','c6')
for(i in 1:length(vec)){
    newCol <- numeric(1000)
    x[[vec[i]]] <- newCol
}

导致:

> head(x)
  numeric.1000. c1 c2 c4 c5 c6
1             0  0  0  0  0  0
2             0  0  0  0  0  0
3             0  0  0  0  0  0
4             0  0  0  0  0  0
5             0  0  0  0  0  0
6             0  0  0  0  0  0

请注意,这不是一个很好的练习,并且不能很好地扩展。你真的不想成长这样的对象,因为必须重新分配内存的成本。如果你事先知道你将需要多少列(并且你这样做,因为你循环使用它们的名字),最好只创建整个数据帧,然后在循环中填充它。

相关问题