使用R将1-10的向量改变为1-3的向量

时间:2015-03-14 21:01:56

标签: r function data-conversion survey

我使用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循环,有没有一种简单的方法可以做到这一点?谢谢!

2 个答案:

答案 0 :(得分:3)

您可以使用位置索引来执行此操作:

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

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

答案 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