5

我是新来的R,并且已按如下方式导入了我的数据集(点表示还有剩余数据):

> num.csv <- read.csv("c:/num.csv", header=T)
> print(num.csv)
            X.Y
1     22500;482
2       25842;1
3       27221;1
4       32757;1
5       40152;1
.       .
.       .
.       .

如何为这些数据制作散点图?

谢谢。

4

2 回答 2

8

首先,数据需要在不同的列中。虽然该文件被标记为“csv”,但您似乎使用分号而不是逗号来分隔。重新格式化文件或尝试:

num.csv <- read.csv("c:/num.csv", header=T, sep=";")

然后,您可以使用带有 R 的各种绘图包之一来制作绘图。例如:

install.packages("ggplot2"); #ggplot2 is not part of the standard install...
library(ggplot2);
qplot(X, Y, data=num.csv);

我没有测试过上面的内容,这取决于你的数据框是如何从 read.csv 中出来的。

于 2011-08-05T14:16:26.573 回答
4

@patrickmdmnet 的答案是要走的路,但我有点好奇,只是想尝试一个程序化的解决方案。我主要对 R strplit() 函数是如何工作的感到好奇:

# Test matrix
tmp.mtrx <- matrix(c("1;2", "3;4", "5;6", "7;8"), ncol=1)

# The split
tmp.split <- strsplit(tmp.mtrx, ";")

# Put it all together into a new matrix
new_matrix <- matrix(tmp.split[[1]], ncol=2)
for(i in 2:length(tmp.split)){
  new_matrix <- rbind(new_matrix, tmp.split[[i]])
}

# Do the plot originally asked for
plot(new_matrix[,1], new_matrix[,2])

@ Chl - 我一直在寻找 unlist 函数,它使没有循环的解决方案更好,尽管因为我已经编写了很多程序,我经常发现如果我的代码没有太大的影响,让我的代码更具可读性更好表现。这是 Chl 在 a 中的解决方案,矩阵稍微复杂一些:

# Test matrix
tmp.mtrx <- matrix(c("1;2", 55,  "3;4", 75, "5;6", 85, "7;8", 88), ncol=2)

# The split
tmp.split <- strsplit(tmp.mtrx, ";")

# A vector with all the values, length = (ncol(tmp.mtrx) + 1)*nrow(tmp.mtrx)
tmp.data_vector <- unlist(tmp.split)

# Put it all together into a new matrix
new_matrix <- matrix(tmp.data_vector, ncol=(ncol(tmp.mtrx)+1), byrow=TRUE)

# Do the plot originally asked for
plot(new_matrix[,1], new_matrix[,2])
于 2011-08-05T21:01:16.040 回答