R 将新列添加到数据框中,在循环中为每列指定不同的名称

R 将新列添加到数据框中,在循环中为每列指定不同的名称,r,R,这里有一个数据帧和向量 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 上面是我的数据帧

这里有一个数据帧和向量

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
上面是我的数据帧,我正在查找(mpg,spd),(mpg,wt),(mpg,ast),(mpg,alp),(spd,wt)等属性的相关性,需要在新的数据帧中用特定名称将这些值附加到新列中

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]  
    }
在这里,我想用vector中的名称附加新列,并将值附加到b中 我的愿望是:

p1   p2   c1   c2    c3     c4    c5
mpg spd   43   0.4   23    87    23
mpg wt    76    23   19    43     12

假设您已经有一些数据帧:

x <- data.frame(numeric(1000))
可以在for循环中添加更多列,如下所示:

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

但请注意,这并不是一个很好的实践,也不能很好地扩展。你并不真的想成为这样不断增长的对象,因为需要重新分配内存。如果您事先知道需要多少列(而且您知道,因为您正在循环它们的名称),那么最好只创建整个数据帧,然后在循环中填充它。

从循环中分配列名:
colnames(tb)[,2:(length(vec)+1)]=vec
循环的目的是什么?代码非常简单strange@Asha这个问题一点也不清楚。你能给出例子和想要的结果吗?我已经编辑了这篇文章
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