Динамическое имя столбца в цикле for с помощью cbind - PullRequest
18 голосов
/ 31 марта 2012

Я пытаюсь выполнить такой цикл, в котором я хочу динамически назначить имя столбца матрицы:

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

Любая идея (кроме изменения названий ex-post)?

Спасибо

Ответы [ 5 ]

16 голосов
/ 31 марта 2012

А как насчет этого? Вы должны установить имена столбцов после того, как закончите полностью проработанную матрицу.

> 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
4 голосов
/ 22 апреля 2016

Если вы не используете cbind, вы также можете сделать это:

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

Paste0 - просто вставить с sep = "", что очень удобно. К счастью, paste и paste0 могут использоваться для создания новых столбцов без cbind, как показано выше.

3 голосов
/ 14 июля 2016

Если у вас есть проблема с тем, что вы не знаете номер добавленного столбца, вы можете добавить и назвать их по:

df <- data.frame(matrix(1:9, 3, 3))
df
#>  X1 X2 X3
#>1  1  4  7
#>2  2  5  8
#>3  3  6  9

for(i in 1:5){
  df[, ncol(df) + 1] <- rnorm(nrow(df))
  names(df)[ncol(df)] <- paste0("mean_", i)
}

df
#>  X1 X2 X3     mean_1     mean_2    mean_3     mean_4     mean_5
#>1  1  4  7 -1.9983501 -1.6810377 1.2893602  0.5342042 -0.8354363
#>2  2  5  8  0.5966507 -0.5628999 1.2953387 -0.6661931 -0.4685747
#>3  3  6  9 -0.4268952 -2.0069306 0.6390317 -0.3505088  0.1230753
1 голос
/ 18 марта 2013
#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
1 голос
/ 31 марта 2012

Если я правильно понимаю ваш вопрос ...

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...