【问题标题】:Using column names of data.frame [duplicate]使用 data.frame 的列名 [重复]
【发布时间】:2016-12-15 02:39:47
【问题描述】:

我有以下(简化的)文本文件,名为datafile.txt

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 中提取的列名来执行分析,而不是直接输入 SalesHeightColor。非常感谢您的帮助。

【问题讨论】:

  • 尽管使用了“table”一词,但 R 中的术语 data.table 并不是指由 read.table 创建的对象类型。首先创建数据帧(作为 S 的一部分,然后在其克隆 R 中创建,但 data.tables 是 Matt Dowle 的最新发明,并且完全不同。read.table 函数(及其所有 read.* 表亲)创建一个数据框。如果您确实想要一个 data.table,则需要阅读该包文档并使用fread

标签: r anova


【解决方案1】:

我们需要使用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

【讨论】:

  • anova(lm(get(columnNames[3]) ~ get(columnNames[1])*get(columnNames[2]), data))
  • akrun,G5W,非常感谢您非常迅速和有用的回答。这是我的第一篇文章,我对这个系统的有效性感到惊讶。
猜你喜欢
  • 2017-06-03
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
相关资源
最近更新 更多