我有一个数据框,其中包含[0,1](df$Estimate
)和四列(df$V1-4
)中断值的值列;每行的格式为c(0, [somevalue], 0.8, 1)
。对于df$Estimate
中的每个值,我想将其行df$V1-4
的值传递给cut函数。
使用for循环版本的解决方案复制示例的代码:
nrow <- 10
set.seed(1)
df <- data.frame(Estimate = runif(nrow), V1 = 0,
V2 = runif(nrow, 0.1, 0.75),
V3 = 0.8, V4 = 1)
bins <- vector(length = nrow(df))
for (i in 1:nrow(df)) {
bins[i] <- cut(df$Estimate[i], df[i, grep("V[0-9]", colnames(df))])
}
所以我有一个kludgey解决方案,但是正确的方法是什么?
答案 0 :(得分:3)
我不知道这是否正确,但有可能使用findInterval
:
apply(df, 1, function(v) { findInterval(v[1], v[2:5]) })
答案 1 :(得分:1)
使用apply
的另一个cut
解决方案仍然是:
apply(df,1,function(x) cut(x[1],x[-1],labels = FALSE))