Comme pour les listes, vous pouvez utiliser les fonctions 1app1y et sappliy avec les images de données.
Utilisation de lapply () et sapply () sur les cadres de données
Gardez à l'esprit que les trames ou cadres de données sont des cas particuliers de listes, les composantes de la liste étant constituées des colonnes de la trame de données. Ainsi, si vous appelez lapply () sur un cadre de données avec une fonction f () spécifiée, alors f () sera appelé sur chacune des colonnes de la trame, avec les valeurs de retour placées dans une liste.
Par exemple, avec notre exemple précédent, nous pouvons utiliser lapply comme suit:
Donc, dl est une liste composée de deux vecteurs, les versions triées des enfants et des âges.
Notez que dl est juste une liste, pas une image de données. Nous pourrions le contraindre à un cadre de données, comme ceci:
Mais cela n'aurait aucun sens, car la correspondance entre les noms et les âges a été perdue. Jack, par exemple, est maintenant classé comme 10 ans au lieu de 12. (Mais si nous voulions trier le cadre de données par rapport à l'une des colonnes, en préservant les correspondances, nous pourrions suivre l'approche présentée à la page 135.)
Dans le monde de la base de données relationnelle, l'une des opérations les plus importantes est celle d'une jointure, dans laquelle deux tables peuvent être combinées selon les valeurs d'une variable commune. Dans R, deux trames de données peuvent être combinées de manière similaire à l'aide de la fonction merge().
La forme la plus simple est la suivante:
Cela fusionne les images x et y. Il suppose que les deux trames de données ont une ou plusieurs colonnes avec des noms en commun. Voici un exemple:
Ici, les deux cadres de données ont en commun les enfants comme variables. R a trouvé les lignes dans lesquelles cette variable avait la même valeur d'enfants dans les deux cadres de données (ceux de Jack et Jill). Il a ensuite créé un cadre de données avec des lignes correspondantes et avec des colonnes issues de cadres de données (enfants, états et âges).
La fonction merge() a nommé les arguments by.x et by.y qui gèrent les cas dans lesquels les variables ont des informations similaires mais des noms différents dans les deux trames de données. Voici un exemple:
Même si notre variable s'appelait les enfants dans un cadre de données et les pals dans l'autre, il était destiné à stocker la même information, et donc la fusion avait du sens.
Les correspondances en double apparaîtront pleinement dans le résultat, éventuellement de manière non souhaitable.
Il y a deux Jills dans d2a. Il y a un Jill dans d1 qui vit à Massachu -setts et un autre Jill avec une résidence inconnue. Dans notre exemple précédent, merge (d1, d2), il n'y avait qu'un Jill, qui a été supposé être le même dans les deux cadres de données. Mais ici, dans la fusion de l'appel (d1, d2a), il se pourrait que l'un des Jills soit un résident du Massachusetts. Il ressort clairement de ce petit exemple que vous devez choisir les variables correspondantes avec beaucoup de soin.
Diverses opérations matricielles s'appliquent également aux cadres de données. Plus particulièrement et d'une manière utile, nous pouvons faire un filtrage pour extraire différents cadres de sous-données intéressants.
5.2.1 Extraction de cadres de sous-données
Comme mentionné, un cadre de données peut être visualisé en termes de lignes et de colonnes. En particulier, nous pouvons extraire des images de sous-données par des lignes ou des colonnes. Voici un exemple:
Notez que dans ce deuxième appel, puisque examsquiz [2: 5,2] est un vecteur, R a créé un vecteur au lieu d'un autre cadre de données. En spécifiant drop = FALSE, comme décrit pour le cas matriciel à la section 3.6, nous pouvons le conserver en tant que cadre de données (une colonne). Nous pouvons également faire un filtrage. Voici comment extraire le sous-châssis de tous les élèves dont le premier résultat de l'examen était d'au moins 3,8:
5.2.2 Plus sur le traitement des valeurs NA
Supposons que le deuxième score d'examen pour le premier étudiant ait été manquant. Ensuite, nous aurions tapé ce qui suit dans cette ligne lorsque nous préparions le fichier de données:
Dans toutes les analyses statistiques ultérieures, R ferait de son mieux pour faire face aux données manquantes. Cependant, dans certaines situations, nous devons définir l'option na.rm = TRUE, expliquant explicitement à R d'ignorer les valeurs de NA. Par exemple, avec le score d'examen manquant, le calcul du score moyen sur l'examen 2 en appelant la fonction moyenne (R) de R sauterait le premier étudiant dans la recherche de la moyenne. Sinon, R signalerait simplement NA pour la moyenne.
Voici un petit exemple:
Dans la section 2.8.2, vous avez été présenté à la fonction subset(), ce qui vous permet de ne pas spécifier na.rm = TRUE. Vous pouvez l'appliquer dans des images de données pour la sélection des lignes. Les noms des colonnes sont pris dans le contexte du cadre de données donné. Dans notre exemple, au lieu de taper ceci:
nous pourrions exécuter ceci:
Notez que nous n'avons pas besoin d'écrire ceci:
Dans certains cas, nous voudrions peut-être débarrasser notre cadre de données de toute observation ayant au moins une valeur de NA. Une fonction pratique à cette fin est complete.cases ().
Les cas 2 et 4 étaient incomplets; d'où les valeurs FALSE dans la sortie de comp1ete.cases (d4). Nous utilisons ensuite cette sortie pour sélectionner les lignes intactes.
3 Utilisation des fonctions bb () et cbind () et fonctions alternatives
Les fonctions de matrice rbind () et cbind () introduites dans la section 3.4 fonctionnent également avec des images de données, à condition que vous ayez des tailles compatibles, bien sûr. Par exemple, vous pouvez utiliser cbind () pour ajouter une nouvelle colonne qui a la même longueur que les colonnes existantes.
En utilisant rbind () pour ajouter une ligne, la ligne ajoutée se présente généralement sous la forme d'un autre cadre ou liste de données.
Vous pouvez également créer de nouvelles colonnes des anciennes. Par exemple, nous pouvons ajouter une variable qui est la différence entre les examens 1 et 2:
Le nouveau nom est assez difficile à gérer: il est long et il a des espaces blancs intégrés. Nous pourrions le modifier en utilisant la fonction names (), mais il serait mieux d'exploiter la base de données de la base de données et d'ajouter une colonne à la trame de données pour ce résultat:
Que s'est-il passé ici? Étant donné que l'on peut ajouter un nouveau composant à une liste déjà existante à tout moment, nous l'avons fait: Nous avons ajouté un composant ExamDiff à la liste / cadre de données examensquiz.
Nous pouvons même exploiter le recyclage pour ajouter une colonne qui a une longueur différente de celle du cadre de données:
4 La fonction apply ()
Vous pouvez utiliser apply () sur les trames de données, si les colonnes sont toutes du même type. Par exemple, nous pouvons trouver la note maximale pour chaque élève, comme suit:
Pour commencer, regardons l’exemple suivant:
1 Accès aux cadres de données
Maintenant que nous avons un cadre de données, explorons un peu. Puisque d est une liste, nous pouvons extraire les éléments:
Mais nous pouvons le traiter de manière matricielle aussi. Par exemple, nous pouvons voir la colonne 1:
Cette qualité semblable à une matrice est également observée lorsque nous supprimons d en utilisant str ():
5.1.2 Exemple étendu: Analyse de régression des notes d'examen Suite
Rappelons nos données d'examen de cours dans la section 1.5. Là, nous n'avons pas d'en-tête, mais pour cet exemple, nous faisons, et les premiers enregistrements dans le fichier sont les suivants:
Quiz "examen 2" examen "examen 2"
2.0 3.3 4.0
3.3 2.0 3.7
4.0 4.0 4.0
2,3 0,0 3,3
2,3 1,0 3,3
3.3 3.7 4.0
Comme vous pouvez le voir, chaque ligne contient les trois résultats de tests pour un étudiant. C'est la notion classique de fichier bidimensionnel, comme cela a été mentionné dans la sortie précédente de str (). Ici, chaque ligne de notre fichier contient les données pour une observation dans un ensemble de données statistiques. L'idée d'un cadre de données est d'encapsuler ces données, ainsi que des noms de variables, en un seul objet.
Notez que nous avons séparé les champs ici par des espaces. D'autres délimiteurs peuvent être spécifiés, notamment des virgules pour les fichiers de valeur séparée par des virgules (CSV) (comme vous le verrez dans la section 5). Les noms de variables spécifiés dans le premier enregistrement doivent être séparés par le même délimiteur utilisé pour les données, ce qui est un espace dans ce cas. Si les noms eux-mêmes contiennent des espaces intégrés, comme nous l'avons fait ici, ils doivent être cités.
Nous lisons dans le fichier comme précédemment, mais dans ce cas, nous déclarons qu'il y a un enregistrement d'en-tête:
Les noms des colonnes apparaissent maintenant, avec des périodes remplaçant les blancs: