如何将因子转换为数字

问题描述 投票:4回答:1

我的数据:

data <- read.table(text = "Component    Method  Average StdErr
N170    Image   0,58904 0,0066948
P300    Image   0,84932 0,0048678
Sham    Image   0,23944 0,0058078
N170    Topo    0,64384 0,0065159
P300    Topo    0,90278 0,0040316
Sham    Topo    0,32877 0,0063921
N170    Joint   0,65278 0,0064788
P300    Joint   0,84722 0,0048959
Sham    Joint   0,26230 0,0059937", header = TRUE)

我想用ggplot2绘制这个。在尝试计算误差线时,我收到错误。我发现这是因为“平均”是一个因素而不是数字。运行我的代码:

ggplot(data=data, aes(x=Method, y=Average, group=Component)) + 
  geom_line(aes(colour=Component), size=1)+
  geom_pointrange(aes(ymin=Average-StdErr, ymax=Average+StdErr))+
  geom_point(aes(colour=Component), size=3)+
  theme_classic()

给我这个错误信息:

Warning messages:
1: In Ops.factor(Average, StdErr) : ‘-’ not meaningful for factors
2: In Ops.factor(Average, StdErr) : ‘+’ not meaningful for factors
3: Removed 9 rows containing missing values (geom_pointrange).

我尝试使用此代码将Average和StdErr转换为数字,但它没有解决我的问题。

data$Average <- as.numeric(data$Average)
data$StdErr <- as.numeric(as.vector(data$StdErr))

或者,我尝试将我的数据作为.csv读取:

data <- read.csv(file="C:/Users/XXX/Desktop/XXX/XX/ggplot/corrComp_agg.csv", 
                 header=TRUE, sep=",")

但是收到一条错误消息:

Error in read.table(file = file, header = header, sep = sep, quote = quote,  : 
  more columns than column names

我错过了什么?

r ggplot2
1个回答
2
投票

你应该在dec = ","语句中使用read.table将逗号读作十进制字符

data <- read.table(text = "Component    Method  Average StdErr
N170    Image   0,58904 0,0066948
                   P300    Image   0,84932 0,0048678
                   Sham    Image   0,23944 0,0058078
                   N170    Topo    0,64384 0,0065159
                   P300    Topo    0,90278 0,0040316
                   Sham    Topo    0,32877 0,0063921
                   N170    Joint   0,65278 0,0064788
                   P300    Joint   0,84722 0,0048959
                   Sham    Joint   0,26230 0,0059937", dec =",", header = TRUE)

现在你的AverageStdErr是数字

sapply(data, class)
#Component    Method   Average    StdErr 
# "factor"  "factor" "numeric" "numeric" 

因此,绘图现在很容易

ggplot(data=data, aes(x=Method, y=Average, group=Component)) + 
  geom_line(aes(colour=Component), size=1)+
  geom_pointrange(aes(ymin=Average-StdErr, ymax=Average+StdErr))+
  geom_point(aes(colour=Component), size=3)+
  theme_classic()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.