2015-12-03 4 views
-2

est Ci-dessous un ensemble d'échantillons de données de données:boucle dans toutes les colonnes d'une trame de données et somme si la valeur est présente dans une certaine colonne

y<-c("A1","B1", "C2", "A1", "B1","C1", "A1","B2", "C3", "A1", "B1", "C4", "A1", "B1","C4", "A1","B2", "C4", "A1","B1", "C4", "A1", "B1", "C4") 
    test<- data.frame(matrix(y, nrow = 3, ncol = 8)) 
    colnames(test) <- c("Learn_1", "Car_1", "Car_2", "Fan_1", "Fan_2", "Fan_3","Kart_1", "God_1") 
    test 

Est-il possible en utilisant une fonction appliquer à boucle à travers chaque colonne, mais la dernier et résumer le nombre de fois qu'une valeur est présente seulement si trouvé dans la dernière colonne d'une base de données (utilisant ainsi ma dernière colonne comme un index pour rechercher)? Je sais que je peux le faire en utilisant une boucle for, mais est assez long, peut-être un moyen de le faire en utilisant une fonction d'application?

+3

Alors, quelle est exactement la sortie désirée pour cette entrée d'échantillon? (Soyez aussi précis que possible) – MrFlick

+0

La sortie désirée est une liste ou une table des sommations des valeurs qui existent dans la dernière colonne qui apparaissent dans les autres colonnes dans la base de données. Mon but final est de tracer cette sommation dans un rectangle. Où le rectangle est le nombre total de gènes dans la dernière colonne et décomposé en pourcentage de couleurs (différentes couleurs). Le pourcentage de nuances est la proportion de valeurs qui apparaissent 1 fois, 2 fois, 3 fois, etc ... – Chad

Répondre

1

Si vous cherchez le nombre de fois une valeur correspondant à la valeur de la dernière colonne se trouve, par ligne, cela fonctionne:

apply(test,1,FUN= function(x) length(which(x[-8]==x[8])))

Vous pouvez facilement adapter à un nombre quelconque de colonnes et même l'ajouter comme une nouvelle colonne.

EDIT:

Si elle est pour l'ensemble des données, vous pouvez utiliser:

test<-as.matrix(test); 
table(test[,-8])[match(test[,8],names(table(test[,-8])))] 

après votre propre code.

+0

Ouostiti est-il un moyen de le faire, mais les données sont mélangées et peuvent correspondre sur une ligne différente, puis ce que je je vérifie? – Chad

+0

J'ai édité ma réponse. – Ouistiti

+0

parfait, Ouistiti! – Chad