6
votes

Somme conditionnelle en r

J'ai un cadre de données de 200 rangées de 6 colonnes. Je suis intéressé à calculer le total des temps qu'une valeur dans le col A est inférieure à un nombre spécifique. Le nombre peut être codé dur. Je ne sais pas où commencer ...


0 commentaires

5 Réponses :


6
votes

Pour compter combien de valeurs sont inférieures à un nombre quelconque, vous pouvez utiliser ? somme xxx


0 commentaires

5
votes

L'utilisation de la somme de votre condition fonctionnera. Les valeurs logiques sont converties à 0 pour FALSE et 1 pour un vrai sommation sur un logique vous indique combien de valeurs sont vraies.

 dat <- as.data.frame(matrix(1:36,6,6))
 colnames(dat) <- paste0("Col", LETTERS[1:6])
 dat$ColA
# [1] 1 2 3 4 5 6
 dat$ColA < 3
# [1]  TRUE  TRUE FALSE FALSE FALSE FALSE
 sum(dat$ColA < 3)
# [1] 2


0 commentaires

10
votes

Pour un problème légèrement plus complexe, utilisez le "qui" pour dire "la somme" où sommeillir: Si DF est la trame de données:

sum(DF[which(DF[,1]>30 & DF[,4]>90),2])


0 commentaires

3
votes

tandis que la réponse somme (Columna df $ est correcte, il pourrait être préférable de se développer un peu.

Dites si vous souhaitez résumer les valeurs au lieu de compter Vous pouvez utiliser: p>

somme (df $ $ colonne p>

ou s'il y a na code > Valeurs Utilisation: P>

Somme (df $ $ Columna
somme (df [(df $ chronique p>

Ce qu'il arrive de créer Un vecteur booléen de Columna qui est vrai / faux basé sur votre conditionnel. Ensuite, vous prenez un sous-ensemble du Dataframe d'origine et utilisez-le dans ce cas pour faire la somme de la centimaire. P>

Voici un exemple que vous pouvez utiliser pour l'essayer: P>

df = data.frame(colA=c(1, 2, 3, 4, NA), colB=c('a', NA, 'c', 'd', 'e'))

# Count
sum(df$colA) # NA
sum(df$colA, na.rm=TRUE) # 10 This is actually sum of values since colA wasn't turned into vector of booleans
sum(df$colA > 0, na.rm=TRUE) # 4
sum(df$colA > 2, na.rm=TRUE) # 2
sum((df$colA > 2) & (df$colB == 'd'), na.rm=TRUE) # 1

# Sum of values
sum(df$colA, na.rm=TRUE) # 10
sum(df[df$colA > 0,]$colA, na.rm=TRUE) # 10
sum(df[df$colA > 2,]$colA, na.rm=TRUE) # 7
bn_vector = (df$colA > 2)&(df$colB=='d') # Boolean vector
sub_df = df[bn_vector,] # Subset of the dataframe. Leaving the second argument in [] empty uses all the columns
sub_df_colA = df[bn_vector, 'colA'] # Content of column 'colA' which is vector of numbers
sum(sub_df$colA) # 4
sum(sub_df_colA) # 4


0 commentaires

0
votes

ozone <-c (41,97,97)

solar.r <-c (190.267.272)

Wind <-C (7.4,6.3.5.7)

TEMP <-C (67,92,92)

mois <-c (5,7,7)

jour <-c (1,8,9)

TBL <-Data.frame (ozone, solaire, vent, temp, mois, jour)

tbl

ozone | Solar.R | Vent | Temp | Mois | Jour 1 41 | 190 | 7.4 | 67 | 5 | 1 2 97 | 267 | 6.3 | 92 | 7 | 8 3 97 | 272 | 5.7 | 92 | 7 | 9

SUM (TBL $ TEMP) / SUM (! IS.NA (TBL $ TEMP))

[1] 84


2 commentaires

S'il vous plaît ne postez pas de réponses au code seulement; fournir une explication de la façon dont le code fonctionne et pourquoi est important. De plus, vous devriez formater votre code pour améliorer sa lisibilité.


très bonne réponse. Le code est un message à d'autres programmeurs