Hacer un archivo CSV a un archivo RData
Pregunta
Por favor, tenga con una R novato aquí.Estoy tratando de seguir junto con un tutorial publicado en la maravillosa flowingdata.com sitio con mis propios datos para reemplazar el .Rdata archivo incluido en el tutorial.El archivo Rdata, "unisexCnts.RData", contiene unisex nombres y el número de veces que se utiliza para diferentes años:
head(unisexCnts)
1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951
Addison 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Alexis 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0
Ali 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Alva 0 0 312 273 274 263 0 273 0 255 235 195 222 0 195 0 193 225 204 196 177 156
Amari 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Angel 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973
Addison 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Alexis 0 0 0 0 0 0 0 0 0 0 0 0 190 0 0 325 0 0 0 0 0 0
Ali 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 243 219 214
Alva 177 132 159 178 145 138 131 119 119 119 127 97 107 97 83 76 83 90 84 81 58 68
Amari 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Angel 0 0 0 0 0 0 0 0 0 1264 0 0 0 0 0 0 0 1579 2145 2488 0 0
1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995
Addison 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 595 664
Alexis 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Ali 0 0 0 0 0 0 0 0 0 0 0 0 561 565 556 643 747 722 0 742 0 0
Alva 54 57 53 54 59 40 62 0 48 0 28 0 34 0 0 0 0 0 0 0 0 26
Amari 0 0 0 0 0 0 11 0 0 0 0 0 16 0 22 0 32 0 0 0 0 0
Angel 2561 2690 2779 0 0 3004 3108 3113 3187 2924 3100 3341 3229 3101 3532 3889 4066 4520 0 0 0 0
1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012
Addison 778 889 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Alexis 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Ali 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Alva 0 0 0 19 0 14 0 0 0 0 0 24 0 0 0 0 0
Amari 0 0 0 0 0 0 1181 1397 1333 1299 1265 1550 1780 0 0 0 0
Angel 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Cuando lo ejecuto a través de la str() función obtengo el siguiente:
str(unisexCnts)
num [1:121, 1:83] 0 0 0 0 0 0 16 0 0 0 ...
- attr(*, "dimnames")=List of 2
..$ : chr [1:121] "Addison" "Alexis" "Ali" "Alva" ...
..$ : chr [1:83] "1930" "1931" "1932" "1933" ...
Mis datos están en un archivo csv ,llamado "boysnames.csv":
,2013,2012,2011,2010,2009,2008
Jack,764,831,840,935,1068,1151
James,746,773,796,746,711,737
Daniel,678,683,711,792,842,828
Conor,610,639,709,726,776,857
Estoy intentando sobreescribir el unisexCnts.RData con el contenido de mi boysnames.csv.Así que para reestructurar y recuperar mi csv listo para ser salvos, yo hice:
Paso 1.
unisexCnts<-data <- read.csv("boysnames.csv", stringsAsFactors=FALSE, header=TRUE, check.names = FALSE)
Paso 2.
unisexCnts<-as.matrix(unisexCnts)
Paso 3.
save(file="unisexCnts.RData") ##save as Rdata file, overwriting the original unisexCnts.RData in the dir
Sin embargo me sale el siguiente después de los pasos 1 y 2 que no coincide con la estructura de la original, cualquier idea/sugerencia?
> str(unisexCnts)
chr [1:100, 1:7] "Jack" "James" "Daniel" "Conor" "Sean" "Adam" "Ryan" "Michael" "Harry" "Noah" ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:7] "" "2013" "2012" "2011" ...
Solución
Cuando carga un archivo .csv, puede especificar la columna que debe convertirse en los nombres de fila de los datos cargados usando el comando "Row.names"
Recrea sus datos rápidamente y la cargué utilizando el siguiente código:
read.csv('test.csv', stringsAsFactors = F,head = T, row.names = 1)
Esto le ahorra tener que hacer este trabajo después de subir los datos.Esto le da la estructura de datos que está buscando también:
unisexCnts = read.csv('test.csv', stringsAsFactors = F,head = T, row.names = 1)
unisexCnts = as.matrix(unisexCnts)
str(unisexCnts)
int [1:4, 1:6] 764 746 678 610 831 773 683 639 840 796 ...
- attr(*, "dimnames")=List of 2
..$ : chr [1:4] "Jack" "James" "Dan" "Conor"
..$ : chr [1:6] "X2013" "X2012" "X2011" "X2010" ...
Otros consejos
Sin embargo me sale el siguiente después de los pasos 1 y 2 que no coincide con el la estructura de la original, cualquier idea/sugerencia?
En el original unisexCnts
los nombres se especifican como nombres de fila.Es por eso que el primer atributo es
..$ : chr [1:121] "Addison" "Alexis" "Ali" "Alva" ...
Para replicar que en su ejemplo.Usted puede definir los nombres como rownames especificando
rownames(unisexCnts) <- ListorOrVectorofNamesHere
Esto hará que la salida del partido.
La razón de esta línea:
chr [1:100, 1:7] "Jack" "James" "Daniel" "Conor" "Sean" "Adam" "Ryan" "Michael" "Harry" "Noah" ...
doens no coincide con esta línea
num [1:121, 1:83] 0 0 0 0 0 0 16 0 0 0 ...
es el mismo.Usted tiene los nombres incluidos en la matriz misma.En una matriz que sólo puede tener los datos de la misma tipo de .Mediante la inclusión de datos de carácter en la matriz (los nombres) que son la conversión de la totalidad de la matriz de sí mismo en el personaje/cadenas.
en resumen
quitar el nombre de vector de la matriz y utilizar como nombres de fila y el str()
de sus dos objetos de partido.