变量的子选择

Subselection of a variable

我在选择应包含特定范围值的变量时遇到问题。我想将我的变量分成 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 个变量吗?我觉得我很接近,但到目前为止结果毫无用处。

非常感谢您的帮助。

对于这样的问题,您可以使用 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)

只是为了说明你的问题:

a <- "75"
b <- "175"

a > b

TRUE (75 > 175)

a < b 
FALSE (75 < 175)

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

我想到了两个想法,但代码示例会有所帮助。

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

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

以@Joe 为基础

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

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