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" ...
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top