2011-08-05 16 views
5

Soy nuevo en R, y han importado mi conjunto de datos de la siguiente manera (puntos significa que no haya datos restantes):He importado los datos en R, ¿cómo hacer un diagrama de dispersión?

> 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 
.  . 
.  . 
.  . 

¿Cómo puedo hacer un gráfico de dispersión para estos datos?

Gracias.

+1

No es necesario 'imprimir (...)' si está trabajando con R de forma interactiva. La autoimpresión significa que cuando ingresa el nombre de un objeto y presiona return, R invoca 'print()' por usted. –

+1

Eso claramente no ha funcionado; ahora tiene una sola columna de datos en R, con el nombre de columna 'X.Y' y datos de las 2 columnas originales en su archivo CSV concatenado. Es su archivo en realidad ** coma ** separado. Parece que está separado por ';', lo que sugiere que estás usando una computadora en un lugar extranjero donde usas ',' como el lugar decimal. Si es así, use 'read.csv2()' en su lugar. Si ese es el caso, la moral de la historia es verificar que sus datos hayan sido leídos correctamente. Use 'str (foo)' y 'ncol (foo)', 'nrow (foo)' etc. donde 'foo' es el objeto que contiene sus datos. –

+0

@Gavin: o use 'sep ="; "' – nico

Respuesta

8

En primer lugar, los datos deben estar en columnas separadas. Mientras que el archivo está etiquetado como "csv", parece que está usando punto y coma para separar en lugar de comas. O bien cambiar el formato del archivo o tratar:

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

continuación, puede utilizar uno de los diversos paquetes de trazado con R para hacer una gráfica. Por ejemplo:

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

No he probado lo anterior, depende de cómo su marco de datos sale de read.csv.

+0

O, uno puede simplemente usar la función R '' plot 'básica' 'plot (X, Y, data = num.csv)' . – nico

4

@ La respuesta de patrickmdmnet es el camino a seguir, pero me puse un poco curioso y solo quería probar una solución programática. Yo estaba en su mayoría curiosidad de cómo el R strplit() Funciton trabajó:

# 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 - que estaba buscando la función no listados, hace que la solución más agradable y sin el bucle aunque desde que he estado programando un montón I A menudo me resulta más agradable tener mi código más legible si no tiene un efecto demasiado grande en el rendimiento. Aquí está la solución de Chl en una matriz ligeramente más compleja:

# 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]) 
+0

Puede reemplazar de forma segura el 3er bloque por 'matriz (como.numérico (unlist (tmp_split)), nc = 2, byrow = TRUE)'. Además, 'plot 'funciona bien con una matriz de 2 columnas, por lo que la última instrucción podría reemplazarse por' plot (new_matrix) '. – chl

Cuestiones relacionadas