Faire un fichier CSV dans un fichier RData
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" ...
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.