提问人:Seyma Kalay 提问时间:10/2/2022 最后编辑:s_baldurSeyma Kalay 更新时间:10/2/2022 访问量:70
如何使用 forloop 而不是 ifelse
How to use forloop instead of ifelse
问:
我在下面有示例数据,想用 .提前非常感谢。for loop
ifelse
df <- data.frame(Time = 0:24)
df$TimeBlock <- ifelse( 0 < df$Time & df$Time <= 6, "Night",
ifelse( 6 < df$Time & df$Time <= 12, "Morning",
ifelse( 12 < df$Time & df$Time <= 18, "Afternoon", "Evening")))
答:
3赞
s_baldur
10/2/2022
#1
以下是使用 for 循环的一种方法:
df$ltb = ""
for (i in seq_len(nrow(df))) {
if (0 < df$Time[i] && df$Time[i] <= 6) df$ltb[i] = "Night"
else if (6 < df$Time[i] && df$Time[i] <= 12) df$ltb[i] = "Morning"
else if (12 < df$Time[i] && df$Time[i] <= 18) df$ltb[i] = "Afternoon"
else df$ltb[i] = "Evening"
}
但更 R'ish 的是:
df$ltb =
cut(
df$Time,
c(-Inf, 0, 6, 12, 18, 24),
labels = c("Evening", "Night", "Morning", "Afternoon", "Evening")
)
1赞
SSDN
10/2/2022
#2
cal_time <- function(dtime){
if (0 < dtime && dtime <= 6) output = "Night"
else if (6 < dtime && dtime <= 12) output = "Morning"
else if (12 < dtime && dtime <= 18) output = "Afternoon"
else output = "Evening"
output
}
df$TimeBlock = NA
for(i in 1:nrow(df)){
df[i,]$TimeBlock <- cal_time(dtime = df$Time[I])
}
更好的替代方法:
cal_time <- function(dtime){
if (0 < dtime && dtime <= 6) output = "Night"
else if (6 < dtime && dtime <= 12) output = "Morning"
else if (12 < dtime && dtime <= 18) output = "Afternoon"
else output = "Evening"
output
}
df <- data.frame(Time = 0:24)
df$TimeBlock = apply(df, 1, cal_time)
评论