data.frame或matrix的散点图

时间:2013-10-21 11:07:58

标签: r

与矩阵/数据帧和所有内容相同的问题...... 这次我尝试做散点图。我很确定我能够做到这一点,但不幸的是,同样的问题总是被看到。

这是我的数据:

id  cond    S1.pre  S2.pre  S1.post S2.post V1.pre  V2.pre  V1.post V2.post
  1 aer       21    31        25    35         7     1        19     4
  2 aer       15    26        21    29        13    11        16    14
  3 aer       18    27        23    31         8     2         3     3
  4 aer       17    31        18    39        13    11        15    14
  5 aer       15    26        16    29        26    15        32    20

使用该函数读取txt文件:

data <- read.table("Stats1.13.HW.03.txt", header=T)

> class("data")
[1] "character"

^奇怪?

试图绘制它:

plot(data2$S1.pre~data2$S2.pre~data2$V1.pre~data2$V2.pre, col="green")

Error in (function (formula, data = NULL, subset = NULL, na.action = na.fail,  : 
object is not a matrix
哦,这不是问题。让我做一个矩阵!

data <- as.matrix(data)

惊喜?

  

plot(data $ S1.pre~data $ S2.pre~data $ V1.pre~data $ V2.pre,col =“green”)

Error in data$V2.pre : $ operator is invalid for atomic vectors

如何用矩阵/原子矢量/数字等解决我的问题...

1 个答案:

答案 0 :(得分:2)

首先class("data")表示'给我一类“数据”字符串',它符合预期character。您应该使用class(data)代替。

您的代码中没有data2因此不清楚此对象中的内容。我们假设我们使用data

您尝试绘制像此data$S1.pre ~ data$S2.pre ~ data$V1.pre ~ data$V2.pre这样的公式,它甚至不接近有效的公式。

如果要创建多个散点图,可以使用pairs

pairs(~data$S1.pre + data$S2.pre + data$V1.pre + data$V2.pre)

修改

如果您有矩阵,则无法使用$表示法来访问列,但您可以使用如下语法:

data[, V1.pre]

您还应该记住,矩阵中的所有字段必须是相同的类型,因此在您的情况下,所有值都将转换为字符:

> apply(as.matrix(data[1,]), 2, class)
     id        cond      S1.pre      S2.pre     S1.post     S2.post 
"character" "character" "character" "character" "character" "character" 
V1.pre      V2.pre     V1.post     V2.post 
"character" "character" "character" "character" 

如果您想要数字,则应省略cond列:

> data.matrix <- (data[, -2])
> apply(data.matrix, 2, class)
   id    S1.pre    S2.pre   S1.post   S2.post    V1.pre    V2.pre   V1.post 
"integer" "integer" "integer" "integer" "integer" "integer" "integer" "integer" 
V2.post 
"integer"