我有一个列,其值代表一天中每小时的温度。我想要做的是将每个小于18的值更改为0.但如果每24行(小时)中至少有一个值大于18,我想将所有24个值更改为1。 / p>
我可以使用任何函数或循环来解决这个问题吗?
答案 0 :(得分: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 :(得分: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)