使用dplyr重新编码值范围时出现问题

使用dplyr重新编码值范围时出现问题,r,dplyr,spss,R,Dplyr,Spss,我正在尝试将一些代码从SPSS翻译成R。 对于SPSS中的以下代码块 重新编码示例变量1至1.499=1 1.50至2.499=2.50至3.499=3.50至4.499=4.50至5.499=5.50至6.499=6.50至7 进入newexamplevar。 执行 。。。我正在尝试使用dplyr对值范围进行相同的重新编码。这是我在R中的代码: my_dataset %<>% mutate(newexamplevar=case_when( my_dataset$ex

我正在尝试将一些代码从SPSS翻译成R。 对于SPSS中的以下代码块

重新编码示例变量1至1.499=1 1.50至2.499=2.50至3.499=3.50至4.499=4.50至5.499=5.50至6.499=6.50至7 进入newexamplevar。 执行

。。。我正在尝试使用dplyr对值范围进行相同的重新编码。这是我在R中的代码:

  my_dataset %<>%
  mutate(newexamplevar=case_when(
    my_dataset$examplevar >= 1 & my_dataset$examplevar <= 1.499 ~ 1,
    my_dataset$examplevar >= 1.50 & my_dataset$examplevar <= 2.499 ~ 2,
    my_dataset$examplevar >= 2.50 & my_dataset$examplevar <= 3.499 ~ 3,
    my_dataset$examplevar >= 3.50 & my_dataset$examplevar <= 4.499 ~ 4,
    my_dataset$examplevar >= 4.50 & my_dataset$examplevar <= 5.499 ~ 5,
    my_dataset$examplevar >= 5.50 & my_dataset$examplevar <= 6.499 ~ 6,
    my_dataset$examplevar >= 6.50 & my_dataset$examplevar <= 7 ~ 7
  ))
由于某种原因,重新编码不正确。频率表显示我得到了正确的频率值,但顺序错误。当我比较R和SPSS中的数据集时,我发现,例如,R中的类别“3”是SPSS中的类别“5”。显然,虽然没有发出警告,但重新编码是错误的。
有人知道错误在哪里吗?这可能很琐碎,但我看不出这里有什么问题。

这更像是findInterval或cut的一个用例。试一试

比如说,

set.seed(1223)
numb <- runif(10, 1, 7)
numb
#[1] 4.7738 1.7605 2.9715 2.7135 2.1478 6.0351 1.9393 5.3936 6.0228 1.6113

findInterval(numb, c(1, seq(1.5, 6.5, 1)))
#[1] 5 2 3 3 2 6 2 5 6 2

谢谢大家的回复!
我解决了这个问题,从我的环境中删除了所有内容,重新加载数据集,并从头开始运行每一行。事实证明,我的代码非常好,但我应用它的数据是脏的。有时解决办法比人们想象的要简单-

尝试使用examplevar代替我的数据集$examplevarhi@Shinobi\u Atobe,不幸的是,它对我没有任何帮助。但很高兴知道我以后可以省去数据集名称。在R base中,尝试运行my_数据集$newexamplevar=roundmy_数据集$examplevar或ifelsemy_数据集$examplevar>=1&my_数据集$examplevar
set.seed(1223)
numb <- runif(10, 1, 7)
numb
#[1] 4.7738 1.7605 2.9715 2.7135 2.1478 6.0351 1.9393 5.3936 6.0228 1.6113

findInterval(numb, c(1, seq(1.5, 6.5, 1)))
#[1] 5 2 3 3 2 6 2 5 6 2
cut(numb,breaks = c(1, seq(1.5, 6.5, 1), Inf), labels = 1:7, right = FALSE)