Использование синтаксически сложных строк в качестве имен столбцов во фрейме данных

Я работаю с фреймом данных, подобным приведенному ниже отрывку:

df <- data.frame(A=c("Some messy string to be used",222,0), 
                 B=c("Very important ? indicator from 2001", 888, 44),
                 C=c("001 This variable / makes no sense", 888, 44),
                 D=c("Geography", 1, 2))

Я хотел бы использовать значения в первой строке в качестве имен столбцов, я использую код ниже:

names(df) <- make.names(df[1,])

К сожалению, синтаксис генерирует имена в формате Xn, как показано ниже:

> names(df)
[1] "X3" "X3" "X1" "X3"

Я понимаю, что используемые строки слишком беспорядочны для осмысленного преобразования make.names. Как заставить R использовать эти беспорядочные строки более эффективно? Как правило, я хотел бы:

  1. Сохраняйте цифры (поскольку они соответствуют времени)
  2. Сохраните хотя бы несколько первых слов из текста
  3. Убедитесь, что имена уникальны
  4. Все решение должно быть довольно общим, так как в первой строке много мусора (обычно пустых мест или специальных символов).

person Konrad    schedule 21.07.2015    source источник
comment
Вам может понадобиться unlist, то есть make.names(unlist(df[1,])) Причина, по которой вы получили X1:X5, заключается в том, что df столбцы равны factor, и вы получили числовой индекс после принуждения, который позже был преобразован путем добавления X с make.unique   -  person akrun    schedule 21.07.2015
comment
@akrun, я бы посоветовал вам опубликовать это как ответ, поскольку предложенное решение работает нормально.   -  person Konrad    schedule 21.07.2015


Ответы (2)


Вам вообще не нужно использовать make.names — вы можете назначать строки напрямую. Это отлично работает в R. Вам просто нужно заключить имена в кавычки, когда вы пытаетесь использовать их в качестве имен R (например, после оператора $):

names(df) = unlist(df[1,])
df$`Some messy string to be used`
person Konrad Rudolph    schedule 21.07.2015
comment
@KonradRudloph спасибо, это работает. Небольшая неприятность заключается в необходимости добавлять `` при использовании имени, но это не главная задача. - person Konrad; 21.07.2015
comment
@Konrad: конечно, вы также можете выбрать столбец, подмножив data.frame без использования $, например df[,"Some messy string to be used"] - person digEmAll; 21.07.2015

используйте stringsAsFactors = F в data.frame, который будет создавать столбцы как символы вместо факторов. затем сделайте на нем имена.

df <- data.frame(A=c("Some messy string to be used",222,0), 
             B=c("Very important ? indicator from 2001", 888, 44),
             C=c("001 This variable / makes no sense", 888, 44),
             D=c("Geography", 1, 2),stringsAsFactors = F)
names(df) <- make.names(df[1,])
names(df)
person Sivaji    schedule 21.07.2015