需要在R中的字符串中使用单引号,双引号和变量

时间:2014-02-07 21:17:10

标签: r

在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()但无法让它工作

2 个答案:

答案 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建议似乎更简单。