2014-09-13 3 views
0

У меня есть следующие (только часть кода)Как назначить заголовок кадру данных?

  dat <- rbind(dat,sum(complete.cases(read.csv(files_list[i])))) 
    } 
    data.frame(id,dat) 

, но я получаю следующее. Как изменить заголовок второго столбца на «значение»?

id X1041L 
1 2 1041 
2 4 474 
3 8 192 
4 10 148 
5 12  96 

ответ

1

Вы можете использовать функцию names<- назначения

names(dat)[2] <- "value" 

Вы можете также использовать setNames, которая в основном то же самое, как names<-, но измененные данные возвращается в качестве результата.

setNames(dat, c(names(dat)[1], "value")) 

Update: Чтобы избежать некоторых копирования, сделанные names, вы можете также использовать attr<-

attr(dat, "names")[2] <- "value" 

И как уже упоминалось, Ананда в комментариях, ни по копированию, data.table могут быть использованы

library(data.table) 
setnames(dat, "X1041L", "value") 

Вот взгляд на копирование:

> tracemem(dat) 
# [1] "<0x23289b0>" 
> names(dat)[2] <- "value" 
# tracemem[0x23289b0 -> 0x26a1270]: 
# tracemem[0x26a1270 -> 0x2244030]: 
# tracemem[0x2244030 -> 0x26b9508]: 
> tracemem(dat) 
# [1] "<0x26b9508>" 
> attr(dat, "names")[2] <- "value" 
# tracemem[0x26b9508 -> 0x23dbd50]: 
> library(data.table) 
> tracemem(dat) 
# [1] "<0x28c4408>" 
> setnames(dat, "X1041L", "value") 
+0

Может показаться излишним, чтобы загрузить пакет для чего-то подобного, но «setnames» из «data.table» достигнет этого, не делая копии. Эксперимент с использованием 'tracemem (dat); имена (dat) [2] <- "value" 'по сравнению с' tracemem (dat); setnames (dat, "X1041L", "value") '. – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto - точка взята, но я также мог бы использовать 'attr (dat," names ") [2] <-" значение "', чтобы избежать копирования из 'names'. Хотя DT все еще выигрывает. :-) –

Смежные вопросы