在R

时间:2018-12-03 01:30:34

标签: r type-conversion

我有一个数据集:

 > 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中的值转换为数字后会更改?

1 个答案:

答案 0 :(得分:1)

这是新R用户遇到的一个非常普遍的问题。问题是您使用as.factor。在某个因子上运行as.numeric会将值转换为标签的数字索引,而不是将标签本身转换为数字。您可以删除对as.factor的呼叫,也可以在呼叫as.character之前对因子运行as.numeric

请注意,诸如as.data.frame之类的某些功能会自动将字符转换为因数,这可能会导致问题。请查看选项stringsAsFactors,了解更多信息。