0
votes

Créer une boucle de fonction sur chaque ligne de r

Je veux écrire une fonction qui crée une nouvelle colonne avec RowMeans pour les colonnes 1-3, uniquement si strong> plus de 2 questions pour les colonnes 1-3 par ligne forte> étaient répondit, sinon imprimé 'n'.

Voici mon Dataframe: P>

test p> blockQuote>

sortie souhaitée: p> xxx pré>

Mon code est comme suit, mais cela ne fonctionne pas: p>

#create function
mean_score <- function(x) {
  for (i in 1:nrow(test)){
    if (sum(test[i, x] != "NA", na.rm = TRUE) >2){
      test$mean_score[i] <- rowMeans(test[i, x], na.rm = TRUE)
    } else 
      test$mean_score[i] <- print("N")
  }
}

#compute function
mean_score(1:3)


0 commentaires

3 Réponses :


1
votes

Vous pouvez simplement utiliser RowMeans Qu'est-ce qui reviendra na s'il y a une ligne tenant na Qu'est-ce qui devrait être ici équivalent à Si plus de 2 questions pour les colonnes 1-3 par ligne ont été répondues . xxx


0 commentaires

1
votes

Bien que GKI a une meilleure réponse plus simple et que vous devriez utiliser ici est ce que j'ai changé votre code pour être afin que cela fonctionne.

Généralement, lorsque vous faites une fonction, vous souhaitez que l'entrée soit la saisie, c'est le fichier de données, dans ce cas texte et modifier la fonction de là.

Une autre chose importante de la note est que vous Voulez-vous d'abord de créer un vecteur de valeurs, puis de fixer ledit vecteur au Dataframe que dans le code ci-dessous, mais que vous devez vous assurer de créer un objet vectoriel vide pour le faire. R ne vous permet pas vraiment d'ajouter lentement des données cellulaires à un fichier de données, il préfère qu'un vecteur (qui peut être ajouté à) de longueur égale ne soit joint à celui-ci.

Aussi vous n'avez pas besoin d'utiliser Imprimer () Pour insérer un caractère dans un vecteur.

J'espère que cela vous aidera à expliquer pourquoi votre fonction avait des problèmes, mais franchement, la réponse de GKI est meilleure pour l'utilisation générale R! xxx


2 commentaires

Est-ce qu'en ce qui concerne la redondance du nom de la fonction et le nom de vecteur signifie_score ? Devinez que ce n'est pas la meilleure pratique, mais le code a fonctionné pour moi, donc je ne suis pas sûr de ce que vous soulignez?


Désolé mon erreur, j'ai couru le code et j'ai échoué, je réalise que je lisais le mauvais test . Supprimera mon commentaire.



1
votes

Je pense qu'il n'est pas idéal de mettre un caractère avec une valeur numérique, car elle convertira la colonne entière en caractère. Cependant, si c'est ce que vous voulez: xxx


2 commentaires

Merci d'avoir souligné qu'il est préférable d'éviter les caractères numériques dans la même colonne! Si nous devions utiliser des valeurs numériques, ce serait-il juste d'autre {na}? En outre, recommanderiez-vous postuler sur des boucles?


Oui, vous pouvez simplement ajouter du NA au lieu de "n". Je pense que la version applicable est moins encombrante et plus facile à lire. Il y a beaucoup de messages sur les boucles vs la famille Apply sur ce site Web. Vous trouverez ici un Stackoverflow.com/Questions/ 42393658 / ...