在内部环境中重新开始似乎不起作用

时间:2014-09-29 12:49:08

标签: r

我有一个data.frame,我想将其中一个因子级别放在第一位。但是,使用within环境似乎不起作用。 (我是初学者,如果这很容易请原谅我。)

我的数据框:

df <- as.data.frame(matrix(sample(c("Yes","No"),20,replace=TRUE),ncol=1))
levels(df$V1)
[1] "No"  "Yes"

现在使用relevel重新排序因子级别:

df <- within(df, relevel(V1, ref="Yes"))
levels(df$V1)
[1] "No"  "Yes"

换句话说,relevel似乎不起作用。这一定是因为我严重使用within()环境,因为如果我“直接”使用它就可以了:

df$V1 <- relevel(df$V1, ref="Yes")
> levels(df$V1)
[1] "Yes" "No" 

我做错了什么?

1 个答案:

答案 0 :(得分:4)

我认为你需要

df <- within(df, V1 <- relevel(V1, ref="Yes"))

因为relevel返回因子的重新定义值,但不会将其分配给变量。您正在评估 df中的表达式,但不会将其分配给任何内容。我可能会用

df <- transform(df, V1 = relevel(V1, ref="Yes"))

相反,但这是一种风格偏好(另请参阅plyr / dplyr函数mutatetransmute ...)

如果(在评论中提到)你有一个名字向量(即一个字符向量),那么你就不能真正使用{{1}共享的非标准评估范例},transformwithwithinsubset ...)但是或多或少必须以老式的方式做事,例如

dplyr