我在选择应包含特定值范围的变量时遇到问题。我想将我的变量分成3类。即; small
,medium
和big
。一个背景。我有一个名为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个变量吗?我觉得我很接近但到目前为止结果毫无用处。
非常感谢您的帮助。
答案 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
。