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