Question

S'il vous plaît garder avec un R newbie.Je suis en train de suivre un tutoriel publié sur le merveilleux flowingdata.com site en utilisant mes propres données pour remplacer la .Rdata de fichiers inclus dans le tutoriel.Le fichier Rdata, "unisexCnts.RData", contient unisexe les noms et le nombre de fois utilisées pour les différentes années:

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

Quand je le lance par le biais de la str() fonction-je obtenir la forme suivante:

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

Mes données sont dans un fichier csv ,appelé "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

Je suis en train de remplacer la unisexCnts.RData avec le contenu de mon boysnames.csv.Afin de restructurer et d'obtenir mon csv prêt à être enregistré, j'ai fait:

Étape 1.

unisexCnts<-data <- read.csv("boysnames.csv", stringsAsFactors=FALSE, header=TRUE, check.names = FALSE)

Step2.

unisexCnts<-as.matrix(unisexCnts)

Etape 3.

save(file="unisexCnts.RData")  ##save as Rdata file, overwriting the original unisexCnts.RData in the dir 

Cependant j'ai le après les étapes 1 et 2, qui ne correspond pas à la structure de l'original, toutes les idées/les pointeurs?

> 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" ...
Était-ce utile?

La solution

Lorsque vous chargez un fichier .csv, vous pouvez spécifier la colonne qui doit devenir les noms de ligne des données téléchargées à l'aide de la commande "Row.ames"

J'ai recréé vos données rapidement et téléchargées à l'aide du code suivant:

read.csv('test.csv', stringsAsFactors = F,head = T, row.names = 1)

Cela vous permet d'avoir à faire ce travail après avoir téléchargé les données.Cela vous donne également la structure de données que vous recherchez également:

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

Autres conseils

Cependant j'ai le après les étapes 1 et 2 qui ne correspond pas au la structure de l'original, toutes les idées/les pointeurs?

À l'origine, unisexCnts les noms sont spécifiés en tant que noms de ligne.C'est pourquoi le premier attribut est

  ..$ : chr [1:121] "Addison" "Alexis" "Ali" "Alva" ...

Pour répliquer que dans votre exemple.Vous pouvez définir les noms de la rownames en spécifiant

rownames(unisexCnts) <- ListorOrVectorofNamesHere

Cela permettra à la sortie du match.

La raison de cette ligne:

 chr [1:100, 1:7] "Jack" "James" "Daniel" "Conor" "Sean" "Adam" "Ryan" "Michael" "Harry" "Noah" ...

doens correspondent pas à cette ligne

 num [1:121, 1:83] 0 0 0 0 0 0 16 0 0 0 ...

est le même.Vous avez les noms inclus dans la matrice elle-même.Dans une matrice, vous ne pouvez avoir les données de la même type .En incluant des données de caractère dans la matrice (les noms) de la conversion de l'ensemble de la matrice elle-même en personnage/les chaînes de caractères.

en résumé supprimer le nom de vecteur à partir de la matrice et de l'utiliser comme noms de ligne et l' str() de vos deux objets sera à la hauteur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top