在R中使用car
包我需要使用变量而不是硬编码数字
这有效:
recode(rirecoded,"1:10='Low';11:20='Middle';21:30='High'")
这不是:
a=1
b=10
c=11
d=20
e=21
f=30
recode(rirecoded,"b:b='Low';c:d='Middle';e:f='High'")
我尝试使用cat()
但无法让它工作
答案 0 :(得分:1)
dat <- data.frame(x = 1:20,
y = sample(1:30, 20, replace = TRUE))
dat <- within(dat, {
z <- cut(y, c(1,10,20,30),
labels = c('Low','Med','High'))
zz <- cut(y, c(a, b, d, f),
labels = c('Low','Med','High'))
})
> dat
x y z zz
1 1 6 Low Low
2 2 29 High High
3 3 18 Med Med
4 4 5 Low Low
5 5 2 Low Low
6 6 25 High High
7 7 8 Low Low
8 8 20 Med Med
9 9 18 Med Med
10 10 16 Med Med
11 11 30 High High
12 12 22 High High
13 13 24 High High
14 14 28 High High
15 15 17 Med Med
16 16 25 High High
17 17 8 Low Low
18 18 12 Med Med
19 19 22 High High
20 20 26 High High
答案 1 :(得分:1)
R不会在字符串内扩展变量。您必须使用paste
显式构造字符串:
rirecoded <- sample(1:30)
recode.chr <- paste0(a,":",b,"='Low';",c,":", d,"='Middle';",e,":",f,"='High'")
recode(rirecoded, code.chr)
这会产生:
# [1] "High" "Low" "High" "High" "Low" "Middle" "Middle" "Low" "High"
# [10] "Low" "Low" "High" "Middle" "Middle" "Middle" "Middle" "Middle" "High"
# [19] "Middle" "Middle" "High" "Low" "Low" "High" "Low" "Low" "Low"
# [28] "High" "High" "Middle"
所有这些说法,基于cut
的解决方案,如rawr建议似乎更简单。