Создайте data.frame в R с динамически назначаемыми именами столбцов - PullRequest
12 голосов
/ 03 апреля 2012

Мне нужно создать data.frame, который будет заполняться по одной строке за раз по циклу for.Он имеет 45 столбцов: имена пяти из них являются статическими, но остальные считываются (как вектор) из внешнего файла CSV во время выполнения.Я ищу что-то вроде

goalsMenu <- read.csv("Phase 1 goalsmenu.csv", header = TRUE)
colHeads <- c("analysis","patient","date",as.vector(goalsMenu$Name),"CR")
output <- data.frame(colHeads)

, но это создает data.frame с одним столбцом с именем столбца colHeads.

colHeads <- list("analysis","patient","date",as.vector(goalsMenu$Name),"CR")

кажется шагом в правеНаправление, но мне нужно «сгладить» его, чтобы создать желаемую структуру data.frame

Не могли бы вы посоветовать, пожалуйста?

Ответы [ 3 ]

8 голосов
/ 03 апреля 2012

Помогает ли это?

goalsMenu <- paste("Name", 1:40, sep="")
output <- as.data.frame(matrix(rep(0, 5 + length(goalsMenu)), nrow=1))
names(output) <- c("analysis", "patient", "date", goalsMenu, "CR1", "CR2")

По сути, я создаю data.frame output с количеством столбцов первым и называю эти столбцы на следующем шаге.Тем не менее, будьте в курсе комментариев mdsumner!Таким образом, все столбцы имеют класс numeric.Вы можете разобраться с этим позже, хотя: измените класс столбцов в data.frame

5 голосов
/ 03 апреля 2012

Если вы можете сначала заполнить фрейм (некоторыми) данными, то вы можете просто назначить имена (). В противном случае вам придется сначала составить список (а затем преобразовать в data.frame):

col.names <- LETTERS[1:10]  # Example column names
data <- vector("list", length(col.names))
names(data) <- col.names
print(str(data))            # Inspect the structure

Надеюсь, это поможет

1 голос
/ 27 сентября 2018
for (k in c(1:length(names_array))) {
   #Let's make a blank column, that's the length of the data frame that I'm 
   #going to attach it to:

   temp_col<-rep(NA, nrow(my_df))

   # now here's our 2nd loop
   for(i in c(1:nrow(my_df))) {
      #process the col with some stuff
       temp_col[i] <- i
    } 

    # now we're going to attach the column to the last column in the data 
    #frame
    my_df$temp_col<-temp_col

    # now we're going to assign the name from a vector 
    # we do this by looking at the length of the names
    # array, and use that as the index
    names(my_df)[length(names(my_df))]<-names_array[k]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...