带有cbind的for循环中的动态列名

时间:2012-03-30 22:49:12

标签: r

我正在尝试这样的循环,我想动态分配矩阵列的名称:

for(i in 1:nclass){
  P <- eXb / SeXb[mydata$chid]
  mydata <- cbind(mydata, paste("l_", i, sep="")=P)
}

任何想法(除了事后更改colnames)?

由于

5 个答案:

答案 0 :(得分:16)

这个怎么样?完成完整的矩阵后,您可以设置列名称。

> a <- matrix(1:9, 3)
> a
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> colnames(a) <- paste("col", 1:3, sep = "")
> a
     col1 col2 col3
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

答案 1 :(得分:4)

如果您未使用cbind,也可以执行此操作:

for(i in 1:nclass){
  P <- eXb / SeXb[mydata$chid]
  mydata[,paste0("l_",i)] <- P
}

Paste0只需粘贴sep = "",这非常方便。幸运的是,pastepaste0可用于创建没有cbind的新列,如上所示。

答案 2 :(得分:3)

如果您遇到无法知道添加列数的问题,可以按以下方式添加和命名:

fetch(url, {
    method: 'POST',
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({
        email: login,
        password: password,
    })
})
    .then(function (a) {
        return a.json(); // call the json method on the response to get JSON
    })
    .then(function (json) {
        console.log(json)
    })

答案 3 :(得分:1)

如果我理解你的问题......

a <- as.data.frame(matrix(1:9, ncol=3))
n <- ncol(a)
b <- as.data.frame(matrix(10:18, ncol=3))
colnames(b) <- c("col2", "col1", "col3")
attach(b)

for (i in 1:ncol(b)) {
  n <- n+1
  d <- get(paste("col", i, sep=""))
  a <- cbind(a, d)
  colnames(a)[n] <- paste("col", i, sep="")
}

print(a)

答案 4 :(得分:1)

#here I am extracting the generes of movies and assigning to a dataframe
for(i in 1:length(imdb_generes)){ # imdb_generes c("action","friction","scifi")
   genr <- imdb_generes[i]
   a <- somefunction(-----,genr) # somefunction returns c(1,1,0),c(0,1,0),(1,0,0) subsequently
   names(a) <- genr
   my_df <- cbind(my_df,a)
}

my_df
action friction scifi
  1      0        1
  1      1        0
  0      0        0