更改data.frame值

时间:2010-12-30 01:10:01

标签: r dataframe

背景

区分模型值和预测值。

问题

请考虑以下代码:

library( 'gam' )

slope = 0.55
amplitude = 0.22
frequency = 3
noise = 0.75
x <- 1:200
y <- (slope * x / 100) + (amplitude * sin( frequency * x / 100 ))
ynoise <- y + (noise * runif( length( x ) ))

gam.object <- gam( ynoise ~ s( x ) )
p <- predict( gam.object, data.frame( x = 1:210 ) )

df <- data.frame( value=p, model='y' )

问题

将数据框(model)的某些df行设置为'n'的R语法是什么?:

df[201:210,2] <- 'n'

不起作用,也没有尝试过任何变化。

相关

http://stat.ethz.ch/R-manual/R-patched/library/base/html/Extract.data.frame.html

谢谢!

2 个答案:

答案 0 :(得分:3)

创建数据框时,请将模型的变量类型设置为字符而不是默认值,即因子。这可以在您创建数据框时完成。

df <- data.frame( value=p, model='y',  stringsAsFactors=FALSE)

然后,您可以将任何字符值分配给数据框中的模型变量。

R> df[201:210,2] <- 'n'
R> table(df[,2])
  n   y 
 10 200 

答案 1 :(得分:1)

该列是一个因素:

R> sapply(df, class)
    value     model 
"numeric"  "factor" 
R> 

并且只有一个级别:

R> table(df[,2])

  y 
200 

您可能需要重新调整此级别以允许'n'。

修改:立即重访。您的gam()模型不使用第二列,因此只需执行

即可
R> predict(gam.object, data.frame(x=201:210))
    1     2     3     4     5     6     7     8     9    10 
1.370 1.379 1.388 1.397 1.406 1.415 1.424 1.433 1.442 1.450 
R> 

换句话说,你既不需要y也不需要n,但也许我在这里误解了一些东西。如果是这样,你能否修改你的问题并使其更清楚?