我正在尝试根据前30个百分位数,中间40个百分位数和底部30个百分位数创建一个特定变量(在代码中称为wt_avg)的分类。
例如 -
structure(list(x = 1:10, class = c(1, 1, 1, 2, 2, 2, 2, 3, 3,
3)), .Names = c("x", "class"), row.names = c(NA, -10L), class = "data.frame")
其中“x”是数据,“class”是我想要的输出。
这是我正在使用的代码 -
sent_data$wt_avg = with(sent_data, SENT_Orth_1 + SENT_Orth_2 + SENT_Orth_3)
sent_data$state = quantile(sent_data$wt_avg, probs = c(0, 0.3, 0.7, 1)
na.rm = TRUE)
我收到以下错误 -
$<-.data.frame
中的错误(*tmp*
,“州”,值= c(-13.38,-2.9725,:替换有5行,数据有603
我该如何解决这个问题?谢谢!
答案 0 :(得分:1)
我们可以在quantile
或cut
findInterval
sent_data$newclass <- with(sent_data, findInterval(x, quantile(x,
probs = c(0, 0.3, 0.7, 1)), rightmost.closed = TRUE))
sent_data
# x class newclass
#1 1 1 1
#2 2 1 1
#3 3 1 1
#4 4 2 2
#5 5 2 2
#6 6 2 2
#7 7 2 2
#8 8 3 3
#9 9 3 3
#10 10 3 3