Ich habe ein Datensatz, der 200 Zeilen und 6 Spalten hat. Mich interessiert, wie oft ein Wert in Spalte A kleiner als eine spezifische Zahl ist. Diese Zahl kann fest codiert sein. Ich weiß nicht, wo ich anfangen soll...
Antworten
Zu viele Anzeigen?Für ein etwas komplexeres Problem verwenden Sie "which", um dem "sum" zu sagen, wo es addieren soll: wenn DF das Datenrahmen ist:
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 97 267 6.3 92 7 8
3 97 272 5.7 92 7 9
Beispiel: Die Werte von Solar.R (Spalte 2) addieren, bei denen Spalte1 oder Ozone>30 UND Spalte 4 oder Temp>90
sum(DF[which(DF[,1]>30 & DF[,4]>90),2])
Nur die Verwendung von sum auf Ihrer Bedingung wird funktionieren. Logische Werte werden in 0 für FALSCH und 1 für WAHR umgewandelt, sodass die Summation über ein logisches Ihnen sagt, wie viele Werte WAHR sind.
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
Während die Antwort sum( df$columnA < NUMBER )
korrekt ist, könnte es besser sein, ein wenig darauf einzugehen.
Sagen wir, wenn Sie die Werte summieren möchten, anstatt sie zu zählen, könnten Sie verwenden:
sum(df[df$columnA < Number,]$columnA)
Oder wenn es NA
Werte gibt, verwenden Sie:
sum(df[df$columnA < Number,]$columnA, na.rm=TRUE)
sum(df[(df$columnA < Number)&(!is.na(df$columnA)),]$columnA)
Grundsätzlich erstellen Sie dort einen booleschen Vektor von columnA, der TRUE/FALSE basierend auf Ihrer Bedingung hat. Dann nehmen Sie eine Teilmenge des ursprünglichen Datenrahmens und verwenden diese in diesem Fall zur Summierung von SpalteA.
Hier ist ein Beispiel, das Sie ausprobieren können:
df = data.frame(colA=c(1, 2, 3, 4, NA), colB=c('a', NA, 'c', 'd', 'e'))
# Zählen
sum(df$colA) # NA
sum(df$colA, na.rm=TRUE) # 10 Das ist tatsächlich die Summe der Werte, da colA nicht in einen Vektor von booleschen Werten umgewandelt wurde
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
# Summe der Werte
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') # Boolescher Vektor
sub_df = df[bn_vector,] # Teilmenge des Datenrahmens. Wenn Sie das zweite Argument in [] leer lassen, werden alle Spalten verwendet
sub_df_colA = df[bn_vector, 'colA'] # Inhalt der Spalte 'colA', die ein Vektor von Zahlen ist
sum(sub_df$colA) # 4
sum(sub_df_colA) # 4
Ozone<-c(41,97,97)
Solar.R<-c(190,267,272)
Wind<-c(7.4,6.3,5.7)
Temp<-c(67,92,92)
Month<-c(5,7,7)
Day<-c(1,8,9)
tbl<-data.frame(Ozone,Solar, Wind , Temp,Month, Day)
tbl
Ozone | Solar.R | Wind | Temp | Month | Day 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