变量的子选择

时间:2017-10-05 15:40:50

标签: r range subset selection

我在选择应包含特定值范围的变量时遇到问题。我想将我的变量分成3类。即; smallmediumbig。一个背景。我有一个名为obj_hid_woonopp的变量(大小以m2为单位),它的范围是16-375。我的数据集名为datalogitvar

对不起,我没有可复制的代码。但是,由于我认为这是一个相当简单的问题,我希望它能够得到回答。我正在使用的代码如下

datalogitvar$size_small<-  as.numeric(obj_hid_WOONOPP>="15" & obj_hid_WOONOPP<="75" )
datalogitvar$size_medium<-  as.numeric(obj_hid_WOONOPP>="76" & obj_hid_WOONOPP<="100" )
datalogitvar$size_large<-  as.numeric(obj_hid_WOONOPP>="101")

当我运行这个时,我确实得到了一个结果。只是不是我希望的结果。例如,小类别也包含非常高的数字。似乎(因为我定义"75")它也包含"175"的值,因为它包含"75"。我一直在考虑它,我觉得它将我的数据读作文本而不是数字。但我确实说as.numeric所以我有点困惑。有人可以向我解释我如何确保在适当的范围内创建这3个变量吗?我觉得我很接近但到目前为止结果毫无用处。

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

对于这样的问题,您可以使用公共数据集(如mtcars)复制问题。

关于你的代码 1)您需要在代码右侧为DATASET $ obj_hid_WOONOPP命名数据集。 2)为什么在数值周围使用引号?这些引号可以防止将数字视为数字。它们被视为字符串值。

我想你想使用类似我在下面编写的代码。

mtcars$mpg_small  <- as.numeric(mtcars$mpg >= 15 & mtcars$mpg <= 20)
mtcars$mpg_medium <- as.numeric(mtcars$mpg > 20 & mtcars$mpg <= 25)
mtcars$mpg_large  <- as.numeric(mtcars$mpg > 25)

答案 1 :(得分:0)

只是为了说明你的问题:

C:\Users\[myname]\R

字符串不会像你期望的那样进行比较。

答案 2 :(得分:0)

虽然代码示例很有用,但我会想到两个想法。

首先,查看cut()的文档,该文档可用于根据您设置的分割点将数字向量转换为因子。

其次,正如@MrFlick指出的那样,您的代码可以被重写,以便在包含要转换为数字值的字符串的字符向量上运行as.numeric()然后执行布尔比较,例如>&

以@Joe

为基础
mtcars$mpg_small  <- (as.numeric(mtcars$mpg) >= 15 & 
                     (as.numeric(mtcars$mpg) <= 20))

另外要小心,如果您的字符串obj_hid_WOONOPP包含一些无法强制转换为数字的值,它们将变为NA