函数group_tenure正在运行,但无法在新列中写入“0-1天”等,以及筛选的值。这里的TodayNew是excel中具有账龄的列。
group_tenure <- function(TodayNew){
if (TodayNew >= 0 & TodayNew <= 1){
return ('0-1 Days')
}else if(TodayNew > 1 & TodayNew <= 4){
return('2-4 Days')
}else if (TodayNew > 4 & TodayNew <= 7){
return('5-7 Days')
}else if (TodayNew > 7 & TodayNew <=15){
return('8-15 Days')
}else if (TodayNew > 15 & TodayNew <=30){
return('16-30 Days')
}else if (TodayNew > 30){
return('More than 30 Days')
}
}如下所示显示group_tenure的值,但无法在新列中写入。
group_tenure(1)
[1] "0-1 Days"
> group_tenure(2)
[1] "2-4 Days"
> group_tenure(5)
[1] "5-7 Days"
> group_tenure(8)
[1] "8-15 Days"
> group_tenure(16)
[1] "16-30 Days"
> group_tenure(31)
[1] "More than 30 Days"发布于 2020-12-18 12:39:12
你的函数没有矢量化,所以如果我没看错的话,它就不是你可以在向量上调用的东西(例如,数据框列)。
x <- c(1, 2, 5, 8, 16, 31)
group_tenure(x)
# Warning in if (TodayNew >= 0 & TodayNew <= 1) { :
# the condition has length > 1 and only the first element will be used
# [1] "0-1 Days"如果需要,那么可以使用
Vectorize(group_tenure)(x)
# [1] "0-1 Days" "2-4 Days" "5-7 Days" "8-15 Days"
# [5] "16-30 Days" "More than 30 Days"或者向量化你的函数。在这里,一种有效的方法是使用cut
group_tenure2 <- function(TodayNew) {
as.character(
cut(TodayNew, c(0, 1, 4, 7, 15, 30, Inf),
labels = c("0-1 Days", "2-4 Days", "5-7 Days", "8-15 Days", "16-30 Days", "More than 30 Days"),
include.lowest = TRUE)
)
}
group_tenure2(x)
# [1] "0-1 Days" "2-4 Days" "5-7 Days" "8-15 Days"
# [5] "16-30 Days" "More than 30 Days"https://stackoverflow.com/questions/65351707
复制相似问题