2013-03-26 13 views
7

Se i nomi di colonna in data.table sono in forma di number + character, per esempio: 4PCS, 5Y ecc, come potrebbe essere riferimento come j in modo che x[i,j] è interpretato come un nome di colonna non quotato.come fare riferimento a nomi di colonna che iniziano con un numero, in data.table

Suppongo che questo risolva il mio problema originale. Volevo aggiungere diverse colonne in "data.table" che erano nella forma number + character.

M <- data.table('4PCS'=1:4,'5Y'=4:1,X5Y=2:5) 
> M[,4PCS+5Y] 
Error: unexpected symbol in "M[,4PCS" 

La nuova colonna dovrebbe essere una somma di 4PSC e 5Y.

C'è un modo come fare riferimento a loro in data.table in forma non citato? Se queste colonne sono indicati in data.table con la "logica" citato di data.frame:

> M[,'5Y',with=FALSE] 
    5Y 
[1,] 4 
[2,] 3 
[3,] 2 
[4,] 1 

allora ci sarà una limitazione nella funzionalità di tale riferimento. L'aggiunta non funzionerebbe in quanto non funziona in data.frame:

> M[,'4PCS'+'5Y',with=FALSE] 
Error in "4PCS" + "5Y" : non-numeric argument to binary operator 

la funzionalità data.table permetterebbe di operare sulle colonne. Vorrei trovare una soluzione nella nuova logica data.table, quindi posso utilizzare la sua capacità di trasformare le colonne per nome colonna che fa riferimento a.

La domanda è:
Come citazione il nome della colonna che inizia con il numero in modo che la logica data.table avrebbe capito che si tratta di un nome di colonna.

+1

grazie per i vostri consigli – user2210954

risposta

11

Penso, questo è quello che stai cercando, non sono sicuro. data.table è diverso da data.frame. Si prega di dare un'occhiata al quick introduction, e quindi il FAQ (e anche il manuale di riferimento, se necessario).

require(data.table) 
dt <- data.table("4PCS" = 1:3, y=3:1) 
#   4PCS y 
# 1:    1 3 
# 2:    2 2 
# 3:    3 1 

# access column 4PCS 
dt[, "4PCS", with = FALSE] # notice the with=FALSE 

# returns a data.table 
# 4PCS 
# 1: 1 
# 2: 2 
# 3: 3 

# to access multiple columns by name 
dt[, c("4PCS", "y"), with = FALSE] 

In alternativa, se avete bisogno di accedere alla colonna e non risultato in una data.table, piuttosto un vettore, allora si può accedere utilizzando il $ notazione:

dt$`4PCS` # notice the ` because the variable begins with a number 
# [1] 1 2 3 

# alternatively, as mnel mentioned under comments: 
dt[, `4PCS`] 
# [1] 1 2 3 

Oppure, se si conosce il numero di colonna a cui è possibile accedere utilizzando [[.]] come segue:

dt[[1]] # 4PCS is the first column here 
# [1] 1 2 3 

Edit:

Grazie @joran. Penso che tu sia alla ricerca di questo:

dt[, `4PCS` + y] 
# [1] 4 4 4 
+5

non dimenticare '' dt [, '4PCS']' '(' indietro ticchettio 4PCS', come si farebbe normalmente dati al di fuori. tabella – mnel

+0

quindi chiarire che il nome della colonna non deve iniziare con il numero – user2210954

Problemi correlati