用R重新编码变量

时间:2017-10-21 15:20:49

标签: r

我的数据集“d”具有包含1 - 9的变量Hist和一个奇怪的“#I / T”值。我认为“#I / T”已从Excel导入。

但是,我想重写d $ Hist,所以它只保留1到9之间的值。但我无法弄明白。我试过了:

d $ Hist< - d $ Hist [1:9]

d< - subset(data = d,d $ Hist [1:9])

希望你能帮助我:)。

此致 下进行。

3 个答案:

答案 0 :(得分:1)

你的意思是这样的

d$Hist <- as.numeric( gsub("[^1-9]*","",d$Hist) )

例如

as.numeric(gsub("[^1-9]*","","$#I/T7"))

返回7号。

答案 1 :(得分:0)

以下是两种不同的方式来做你想要的。我相信我更喜欢第二种,我觉得它更安全。这是因为当谈到班级factor的对象时,你永远不会知道 首先,编制一些数据。

set.seed(9486)    # make it reproducible
d <- data.frame(Hist = sample(c("#I/T", 1:9), 20, TRUE), X = rnorm(20))
d$Hist

d2 <- subset(d, Hist %in% 1:9)
d3 <- subset(d, as.character(Hist) %in% as.character(1:9))
identical(d2, d3)
#[1] TRUE

如您所见,结果相同。
注意:在您的代码中subset(data=d, d$Hist ...)。当您使用subset时,您不需要重复数据框的名称d$Hist,只需Hist即可。

答案 2 :(得分:0)

所以我做了这个(删除了&#34;#I / T&#34;从&#34; d&#34;到&#34; d2&#34;)

d2 <- subset(d, Hist %in% 1:9)

然而,我运行了这样的分析(相对生存):

model.hist <- rstrans(Surv(time, cens)~as.factor(d2$Hist)+ratetable(year = year, 
age = age, sex = sex), ratetable = poptab)

summary(model.hist)

分析表明:

                          coef exp(coef) se(coef)      z Pr(>|z|)    
as.factor(d2$Hist)          NA        NA  0.00000     NA       NA    
as.factor(d2$Hist)#I/T      NA        NA  0.00000     NA       NA    
as.factor(d2$Hist)10        NA        NA  0.00000     NA       NA    
as.factor(d2$Hist)2    0.32796   1.38814  0.06651  4.931 8.19e-07 ***
as.factor(d2$Hist)3    1.66204   5.27007  0.31904  5.210 1.89e-07 ***
as.factor(d2$Hist)4    2.29242   9.89889  0.06819 33.618  < 2e-16 ***
as.factor(d2$Hist)5    0.72273   2.06004  0.08140  8.878  < 2e-16 ***
as.factor(d2$Hist)6    1.56012   4.75939  0.16974  9.191  < 2e-16 ***
as.factor(d2$Hist)8    0.12813   1.13670  0.11248  1.139    0.255    
as.factor(d2$Hist)9    1.36726   3.92458  0.10316 13.254  < 2e-16 ***

无法弄清楚原因

  • &#34;#I / T&#34;仍处于分析中
  • 什么(d2 $ Hist)10,因为我只有历史1-9