我在R中创建了一个函数,该函数基于体积度量(而不是观察计数)创建十分位(或任何n-tile)。
User_Decile <- function(x,n,Output = " "){
require(dplyr)
df <- data_frame(index = seq_along(x),value = x)
x_sum <- sum(df$value)
x_ranges <- x_sum/n
df <- df %>% arrange(value)
df$cumsum <- cumsum(df$value)
df$bins <- cut(df$cumsum, breaks = floor(seq(0, x_sum, x_ranges)),
right = T,
include.lowest = T,
labels = as.integer(seq(1,n,1)))
if(Output == "Summary"){
df <- df %>% group_by(bins)
return(df %>% summarise(Lower_Bound = min(value),
Upper_Bound = max(value) - 1,
Value_sum = sum(value)))}
else {
df <- df %>% arrange(index)
return(as.numeric(df$bins))}
}
({x
是数字向量,n
是将数据分组到的箱/平铺数,Output=
指定是否要对边界/数据进行汇总或实际数据本身。)
它以前在我创建的用于分割一些数据的程序中运行良好,但是我只是几个月后第一次尝试再次使用该功能,我得到了:
Error in .bincode(x, breaks, right, included.lowest) :
invalid 'right' argument
根据错误,问题出在cut()函数中的'right'参数。据我所知,right=
参数是布尔型的,只接受T或F值。我都尝试过,但似乎都没有用。
是否有人可以解决此问题,或者可以推荐其他功能来代替cut()
?
答案 0 :(得分:1)
?TRUE
指出:
TRUE和FALSE是表示R中逻辑常数的保留字 语言,而T和F是全局变量,其初始值 设置为这些。
这里看来T
被解释为其他内容。为了安全起见,您应该始终使用TRUE
。