【发布时间】:2020-10-15 21:20:20
【问题描述】:
我在数据表中创建分类变量时遇到问题。我的目标是将 RA 变量分解为不同的组,高组、中组和低组。第一步是使用 quantile 函数基于 RA 创建不同的级别。这不是问题:
base.dat <- read.csv("file:///C:/Users/Owner/Documents/baseball csv.csv", header=TRUE)
base.dat.70 <- base.dat[base.dat$yearID>=1970, ]
base.dat.70.reduce <- base.dat.70[ , c(1, 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 27)]
table <- data.table(base.dat.70.reduce)
table[ ,med.RA:=median(RA), by=yearID]
table[ ,RA.low:=quantile(RA, .33), by=yearID]
table[,RA.high:=quantile(RA, .67), by=yearID]
以上代码正确创建了RA.low和RA.high变量,不同年份的变量不同。
问题在于下一个代码块。我想将每一行与其 RA.low 和 RA.high 进行比较,以将其置于低、中或高组中。不同年份的情况会有所不同。代码如下:
table[ , RA.level:= { if (RA <RA.low) "Low RA"
else if (RA <RA.high) "Medium RA"
else "High RA"}, by=RA]
kable(head(table))
kable(tail(table))
我收到一堆警告,'In if (RA 1 并且只使用第一个元素'
我以前得到过这些,对于数据帧使用 for 循环,我已经能够处理它们。但是这个输出并不完全有效。前五行没问题。这些都是正确的。如果 RA 在 RA.low 和 RA.high 之间,它应该是 Medium RA。如果它低于 RA.low,它应该是低的,如果它高于 RA.high,它应该是高的。这些似乎都是正确的。它们都是同一年的,所以 RA.low 和 RA.high 都是一样的。
问题在于打印出表格的最后六行。
在第一行,776 的 RA 被归类为高,而它应该是中等。在第三行中,704 的 RA 被归类为高,而它应该是低的。在第六行,672 的 RA 被归类为中等,而应该是低的。
我认为评估只针对 RA.low 和 RA.high 的初始值进行,即 1970 年的值。但在那种情况下,第六行应该仍然很低,因为 RA.low 是 677 1970 年,第三排也是中等,不高。
对于这个问题,我深表歉意,我相信修复很容易。我只是不太清楚到底发生了什么。
提前致谢。
【问题讨论】:
-
基本函数
cut()是否也能满足您的需求?
标签: r data.table