如果至少有一行大于18,则将列中的每24行更改为1

时间:2017-03-05 15:59:06

标签: r

我有一个列,其值代表一天中每小时的温度。我想要做的是将每个小于18的值更改为0.但如果每24行(小时)中至少有一个值大于18,我想将所有24个值更改为1。 / p>

我可以使用任何函数或循环来解决这个问题吗?

2 个答案:

答案 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)