2014-09-21 3 views
0

У меня есть данные SPSS, которые я должен мигрировать в R. Данные большой с 202 столбцов и тысячи строкR удалить кавычки в имени столбца кадра данных

v1 v2 v3  v4 v5 
1 USA Male 21 Married 
2 INDIA Female 54 Single 
3 CHILE Male 33 Divorced ...and so on... 

файл данных содержит метки переменных "Identification No", "Country of origin", "Gender", "(Current) Year", "Marital Status - Candidate"

Я прочитал мои данные SPSS с помощью следующей команды

data<-read.spss(file.sav,to.data.frame=TRUE,reencode='utf-8') 

имя столбца читается как v1,v2,v3,v4 и т. Д., Но я хочу, чтобы переменные метки назывались моим именем столбца в кадре данных. Я использовал следующую команду, чтобы найти метки переменных и установить его в качестве имен

vname<-attr(data,"variable.labels") 
for(i in 1:202){vl[i]<-vname[[i]]} 
names(data)<-vl 

Теперь проблема заключается в том, что я должен решить эту колонку как data$"Identification number", что не очень приятно. Я хочу удалить кавычки вокруг имен столбцов. Как я могу это сделать?

+2

Я сомневаюсь, что у вас действительно есть кавычки вокруг имен ваших колонок. Это как раз то, как R представляет значения символов IMO. Проблема с вашими коментами заключается в том, что они содержат пробелы и '(' –

+1

. На самом деле это больше того факта, что все обращения к «$» действительно подразумевают кавычки во втором аргументе, но их печать подавляется. Синтаксический сахар функции «$» «действительно» [$] на самом деле «[[» с нестандартной оценкой последующего выражения. Каждый должен занять некоторое время, чтобы прочитать соответствующий раздел в Подробности '? '[['' –

ответ

4

Вы не можете. Некотированное пространство - это синтаксический символ, который нарушает грамматику.

Опция заключается в том, чтобы изменить имена на те, в которых нет пробелов, и вы можете использовать функцию make.names для этого.

> N = c("foo","bar baz","bar baz") 
> make.names(N) 
[1] "foo"  "bar.baz" "bar.baz" 

Вы можете убедиться, что у вас есть уникальные имена:

> make.names(N, unique=TRUE) 
[1] "foo"  "bar.baz" "bar.baz.1" 
+1

В своем это приведет к именам с большим количеством точек и дополнительными буквами (например, 'X' вместо' ('и т. д.), возможно, более чистая опция - это что-то вроде' gsub ("[[: punct:]]", ", N)'? –

+0

Да, он дал несколько точек между словами. Он работает, но это нехорошее решение. – Prabhu

+0

Должны быть 'make_names' и' makeCamel'. –

1

кавычки были там, потому что имена имели места в них. print(vl,quotes=FALSE) текст без кавычек. Но мне пришлось использовать кавычки, чтобы использовать его как одно имя переменной. Без кавычек пробелы будут разбивать имена переменных.

Это можно решить, удалив пробелы в имени. Я решил эту проблему, заменив все пробелы между ними имен с помощью команды gsub

vl<-gsub(" ","",vl) 
names(data)<-vl 

Теперь большинство имен столбцов могут быть доступны без использования кавычек. Но имена, содержащие другие знаки препинания, не могут использоваться без цитаты.

Alos Решение Spacedman отлично работает и кажется более простым в использовании.

make.names(vl, unique=TRUE) 

Но мне понравилось решение David Arenburg.

gsub("[ [:punct:]]", "" , vl) 

Он удалил все знаки препинания и сделал имя столбца чистым и лучшим.

+1

На самом деле ваше решение 'gsub (" "," ", vl)' не позволит вам получить доступ к столбцу, например '(Current) Year' без кавычек –

+0

Вот почему мне понравился ваш метод – Prabhu

1

Пространства в порядке data.table имена столбцов без особого шума. Но нет, нет возможности избежать использования кавычек по той причине, что Spacedman дал: пробелы разбивают синтаксис.

require(data.table) 
DT <- data.table(a = c(1,1), "bc D" = c(2,3)) 

# three identical results: 
DT[['bc D']] 
DT$bc 
DT[,`bc D`] 

Итак, частичное соответствие с $ (который также работает с data.frames) получает вас от использования цитат. Но это принесет проблемы, если вы ошибетесь.

+0

' DT $ "bc D" 'и' DT $ bc' дает идентичный результат. Это оказалось правдой. Я не знал этого, пока вы не указали. Но в моем случае я не хочу использовать кавычки, а использование '$' без кавычек не указывает на уникальный столбец. – Prabhu

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