-3
我有一列值代表一天中每小時的溫度。我想要做的是將每個小於18的值更改爲0.但是,如果每個24行(小時)至少有一個值大於18,我想將所有24個值更改爲1.如果至少有一行大於18,則將列中的每24行更改爲1
有什麼功能或循環,我可以用這個問題?
我有一列值代表一天中每小時的溫度。我想要做的是將每個小於18的值更改爲0.但是,如果每個24行(小時)至少有一個值大於18,我想將所有24個值更改爲1.如果至少有一行大於18,則將列中的每24行更改爲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
#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)
你應該看看【如何使一個偉大的[R重複的例子(http://stackoverflow.com/questions/5963269/how-to-make -a偉大-R-重複性,例如/ 5963610#5963610)。沒有任何數據或者你已經嘗試過的東西很難回答你的問題。 – tbradley