2013-08-13 13 views
22

Mam dataframe, DF, z wielu kolumn danych już. Mam wektor, namevector, pełen ciągów znaków. Potrzebuję pustych kolumn dodanych do df z nazwami kolumn od namevector.R- dodać puste kolumny do dataframe z określonymi nazwami z wektora

Próbuję dodać kolumny z tym do pętli iteracji po każdej struny w namevector.

for (i in length(namevector)) { 
    df[, i] <- NA 
} 

, ale pozostałem z tym błędem.

Błąd w [<-.data.frame (*tmp*,, I, wartość = NA): nowe kolumny będzie po istniejących kolumn

Alternatywnie, myślałem o utworzenie pustej dataframe z prawidłowymi nazwami zostawić otwory, a następnie cbind-ing dwie ramki danych razem, ale nie jestem pewien, jak to zrobić w celu kodowania tego.

Jak bym go o rozwiązanie tego?

+2

Myślę, że masz na myśli 'seq_len (długość (namevector))' lub coś podobnego. – joran

+0

masz na myśli 'dla (i in (seq_len (length (namevector)) + ncol (df))) ...' następnie zmień nazwy kolumn. –

+1

@JamesPringle 'seq_len (długość (...))' jest longcut do 'seq_along()' –

Odpowiedz

33

Problem z kodem jest w linii:

for(i in length(namevector)) 

Musisz zadać sobie pytanie: co jest length(namevector)? To jeden numer. Więc zasadniczo mówisz:

for(i in 11) 
df[,i] <- NA 

Lub prościej:

df[,11] <- NA 

To dlaczego dostajesz błąd. Co chcesz to:

for(i in namevector) 
    df[,i] <- NA 

Albo prościej:

df[,namevector] <- NA 
-1

Może

df <- do.call("cbind", list(df, rep(list(NA),length(namevector)))) 
colnames(df)[-1*(1:(ncol(df) - length(namevector)))] <- namevector 
12
set.seed(1) 
example <- data.frame(col1 = rnorm(10, 0, 1), col2 = rnorm(10, 2, 3)) 
namevector <- c("col3", "col4") 
example[ , namevector] <- NA 

example 
#   col1  col2 col3 col4 
# 1 -0.6264538 6.5353435 NA NA 
# 2 0.1836433 3.1695297 NA NA 
# 3 -0.8356286 0.1362783 NA NA 
# 4 1.5952808 -4.6440997 NA NA 
# 5 0.3295078 5.3747928 NA NA 
# 6 -0.8204684 1.8651992 NA NA 
# 7 0.4874291 1.9514292 NA NA 
# 8 0.7383247 4.8315086 NA NA 
# 9 0.5757814 4.4636636 NA NA 
# 10 -0.3053884 3.7817040 NA NA 
+0

'set.seed (1)' nie wydaje się bezwzględnie konieczne. –

+2

'set.seed' zostało dodane, więc przykład data.frame będzie taki sam, jeśli użytkownik uruchomi kod. Technicznie, 'rnorm' nie jest w ogóle potrzebny. – dayne

+0

Tak, więc liczby losowe są takie same dla wszystkich, którzy uruchamiają kod. Widzę. –

4

prostu dając jak poniżej działa dla mnie

dataframe [ "newName"] < - NA

Pamiętaj, aby dodać "" dla nowego ciągu znaków.

Powiązane problemy