2017-03-05 19 views
-3

我有一列值代表一天中每小時的溫度。我想要做的是將每個小於18的值更改爲0.但是,如果每個24行(小時)至少有一個值大於18,我想將所有24個值更改爲1.如果至少有一行大於18,則將列中的每24行更改爲1

有什麼功能或循環,我可以用這個問題?

+2

你應該看看【如何使一個偉大的[R重複的例子(http://stackoverflow.com/questions/5963269/how-to-make -a偉大-R-重複性,例如/ 5963610#5963610)。沒有任何數據或者你已經嘗試過的東西很難回答你的問題。 – tbradley

回答

1

你可以做到以下幾點:

set.seed(1) 
df <- data.frame(matrix(round(runif(24*24,1,19)), nrow = 24, ncol = 24)) 
colnames(df) <- paste("hour_", 1:24) 
df[df < 18] <- 0 # change all values < 18 to 0 
df[apply(df, 1, function(x) sum(x > 18) > 0), ] <- 1 # change all 24 values to 1 
1
#DATA 
set.seed(42) 
df = data.frame(Day = ceiling(1:240/24), 
       Hour = 0:239 %% 24, 
       Value = sample(c(15,20), 240, 
       prob = c(0.95 ,0.05), 
       replace = TRUE)) 

#Run ave and obtain max for each group of 24 values (in this example, it's grouped by 'Day') 
as.numeric(ave(df$Value, df$Day, FUN = max) > 18) 
相關問題