2016-12-15 9 views
2

я следующее (упрощенный) текстовый файл, который называется datafile.txt:Использование имен столбцов data.frame

Height Color Sales  
short blue 24  
short blue 25 
short red 31 
short red 28 
short black 35 
short black 32 
tall blue 31 
tall blue 32 
tall red 36 
tall red 32 
tall black 41 
tall black 36 

Из этого текстового файла, я создаю data.frame data:

data <- read.table("datafile.txt", header = TRUE) 

к следующей строке, я могу выполнить двухстороннюю ANOVA:

anova(lm(Sales ~ Height*Color, data)) 

Однако следующий код, который я ожидал, чтобы выполнить двусторонний ANOVA, не работает:

columnNames <- names(data)  
anova(lm(columnNames[3] ~ columnNames[1]*columnNames[2], data)) 

Я хотел бы выполнить анализ, используя имена столбцов, извлеченные из data.frame , а не путем непосредственного ввода Sales, Height и Color. Я буду очень благодарен за вашу помощь.

+0

Несмотря на использование слова "стол", термин 'data.table' в R не ссылается на тип объекта, созданный 'read.table'. Сначала были созданы Dataframes (как часть S, а затем позже в его клоне R, но data.tables - еще более недавнее изобретение для Matt Dowle и совсем другое. Функция 'read.table' (и все ее прочитанные. * кузены) создает фрейм данных.Если вам действительно нужна таблица данных, вам нужно будет прочитать эту документацию пакетов и использовать 'fread'. –

ответ

2

Нам нужно использовать paste и конвертировать в formula

anova(lm(formula(paste(columnNames[3], "~", columnNames[1], "*", columnNames[2])), data)) 

Или даже явного formula не требуется

anova(lm(paste(columnNames[3], "~", columnNames[1], "*", columnNames[2]), data)) 
#Analysis of Variance Table 

#Response: Sales 
#    Df Sum Sq Mean Sq F value Pr(>F) 
#Height  1 90.75 90.750 17.8525 0.005529 ** 
#Color   2 128.17 64.083 12.6066 0.007103 ** 
#Height:Color 2 3.50 1.750 0.3443 0.721876 
#Residuals  6 30.50 5.083      
#--- 
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 
+1

ИЛИ' anova (lm (get (columnNames [3]) ~ get (columnNames [1]) * get (columnNames [2]), данные)) ' – G5W

+1

akrun, G5W, большое спасибо за ваши замечательные быстрые и полезные ответы. Это мой первый пост, и меня просто поражает эффективность этой системы. –