簡體   English   中英

R中的條件和

[英]Conditional Sum in R

我有一個200行乘6列的數據框。 我有興趣計算Col A中的值小於特定數字的總時間。 該號碼可以硬編碼。 我不知道從哪里開始......

對於稍微復雜的問題,使用“which”來告訴“sum”在哪里求和:如果DF是數據幀:

      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

示例:將Solar.R(第2列)的值相加,其中Column1或Ozone> 30 AND Column 4或Temp> 90

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

要計算有多少值低於某個數字,你可以使用?sum

sum( df$columnA < NUMBER )

只使用你的條件的總和將工作。 對於FALSE,邏輯值轉換為0,對於TRUE,邏輯值轉換為1,因此通過邏輯求和可以告訴您有多少值為TRUE。

 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

雖然答案sum( df$columnA < NUMBER )是正確的,但稍微擴展它可能會更好。

假設您想要對值進行求和而不是計算您可以使用的值:

sum(df[df$columnA < Number,]$columnA)

或者如果有NA值使用:

sum(df[df$columnA < Number,]$columnA, na.rm=TRUE)
sum(df[(df$columnA < Number)&(!is.na(df$columnA)),]$columnA)

基本上會發生什么,你創建一個columnA的布爾矢量,它基於你的條件具有TRUE / FALSE。 然后,你將獲取原始數據幀的一個子集,並在這種情況下使用它來進行columnA的求和。

這是一個可以用來試用它的例子:

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

臭氧<-c(41,97,97)

Solar.R <-c(190267272)

風<-c(7.4,6.3,5.7)

溫度<-c(67,92,92)

月<-c(-5,7,7-三)

天<-c(1,8,9)

tbl <-data.frame(臭氧,太陽能,風,溫度,月,日)

TBL

臭氧| Solar.R | 風| 溫度| 月| 第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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM