我有一个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"
我做错了什么?
答案 0 :(得分:4)
我认为你需要
df <- within(df, V1 <- relevel(V1, ref="Yes"))
因为relevel
返回因子的重新定义值,但不会将其分配给变量。您正在评估 df
中的表达式,但不会将其分配给任何内容。我可能会用
df <- transform(df, V1 = relevel(V1, ref="Yes"))
相反,但这是一种风格偏好(另请参阅plyr
/ dplyr
函数mutate
,transmute
...)
如果(在评论中提到)你有一个名字向量(即一个字符向量),那么你就不能真正使用{{1}共享的非标准评估范例},transform
,with
,within
(subset
...)但是或多或少必须以老式的方式做事,例如
dplyr