使用 R 将 1-10 的矢量更改为 1-3 的矢量

Changing vector of 1-10 to vector of 1-3 using R

我正在使用 R 分析调查。其中一些列包括数字 1-10,具体取决于调查受访者如何回答相应的问题。我想将 1-10 等级改为 1-3 等级。有没有简单的方法可以做到这一点?我正在编写一组复杂的 for 循环和 if 语句,但我觉得 R 中一定有更好的方法。

我想把数字1-3改成1;数字 4 和 8 到 2;数字 5-7 到 3,数字 9 和 10 到 NA。

所以在下面的代码片段中,OriginalColumn 将变成 NewColumn。

OriginalColumn=c(4,9,1,10,8,3,2,7,5,6)
NewColumn=c(2,NA,1,NA,2,1,1,3,3,3)

有没有一种简单的方法可以做到这一点而无需一堆疯狂的 for 循环?谢谢!

您可以使用位置索引来做到这一点:

> c(1,1,1,2,3,3,3,2,NA,NA)[OriginalColumn]
 [1]  2 NA  1 NA  2  1  1  3  3  3

它比 repeated/nested ifelse 更好,因为它是矢量化的(因此更容易读、写和理解;而且可能更快)。本质上,您正在创建一个新向量,其中包含您要替换的每个值的新值。因此,对于值 1:3,您需要 1,因此向量的前三个元素为 1,依此类推。然后,您使用原始向量根据原始值的位置提取新值。

你也可以试试

library(car)
recode(OriginalColumn, '1:3=1; c(4,8)=2; 5:7=3; else=NA')
#[1]  2 NA  1 NA  2  1  1  3  3  3