我有一个数据集:
> x
Treatment X1 X2
1 T1 6 7
2 T1 5 9
3 T1 8 6
4 T1 4 9
5 T1 7 9
6 T2 3 3
7 T2 1 6
8 T2 2 3
9 T3 2 3
10 T3 5 1
11 T3 3 1
12 T3 2 3
我正在尝试查找X1和X2列的均值。如果我按原样运行数据,则会收到错误消息:
> t1 <- subset(x[2:3], x$Treatment=="T1")
> x_vec <- colMeans(t1, na.rm = TRUE)
Error in colMeans(t1, na.rm = TRUE) : 'x' must be numeric
因此,我需要将X1和X2转换为数字:
t1$X1 <- as.numeric(as.factor(t1$X1))
t1$X2 <- as.numeric(as.factor(t1$X2))
x_vec <- colMeans(t1, na.rm = TRUE)
但是当我这样做时,我得到了错误的结果:
> x_vec
X1 X2
6.0 4.4
将t1转换为as.numeric()后,t1显示:
> t1
X1 X2
1 6 4
2 5 5
3 8 3
4 4 5
5 7 5
为什么X2中的值转换为数字后会更改?
答案 0 :(得分:1)
这是新R用户遇到的一个非常普遍的问题。问题是您使用as.factor
。在某个因子上运行as.numeric
会将值转换为标签的数字索引,而不是将标签本身转换为数字。您可以删除对as.factor
的呼叫,也可以在呼叫as.character
之前对因子运行as.numeric
。
请注意,诸如as.data.frame
之类的某些功能会自动将字符转换为因数,这可能会导致问题。请查看选项stringsAsFactors
,了解更多信息。