将Stata转换为R - 重新编码

时间:2016-08-29 14:49:13

标签: r stata

我正在尝试从Stata翻译以下内容

clear
set obs 1000
generate y = floor((10-0+1)*runiform() +0)
recode y (7=0) (8=0) (9=1) (10=2)

我以为我使用以下代码:

library(dplyr)
mydata <- y ~ floor((10-0+1)*runif(1000)+0)
recode (mydata, '7'=0, '8'=0, '9'=1, '10'=2)

然而,最后一行不断给我一个错误:

  

UseMethod中的错误(&#34;重新编码&#34;):没有适用于&#39;重新编码的方法。适用于类&#34;公式&#34;的对象。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用cut

n = 1000L
y = cut(runif(n, 0, 11), c(-Inf, 9, 10, Inf), right = FALSE, ordered = TRUE)

您可以看到table

的工作原理
# y
#  [-Inf,9)    [9,10) [10, Inf) 
#       813        91        96

如果您真的想要这些代码,可以使用as.integer(y)-1L。请阅读?cut?factor,了解有关R中的序数数据的详细信息。

到目前为止,我一直在假设重新编码规则存在一些押韵或理由。如果没有,最好将它存储在一个单独的表中并从那里绘制值(这与我在Stata中所做的相同):

rec = data.frame(old = c(7,8,9,10), new = c(0,0,1,2))

n  = 1000L
y  = floor(runif(n, 0, 11))
DF = data.frame(id = 1:10, y)

library(data.table)
setDT(DF)

DF[rec, on=c(y = "old"), y := new]
DF[, .N, keyby=y]

#    y   N
# 1: 0 288
# 2: 1 179
# 3: 2 174
# 4: 3 101
# 5: 4  82
# 6: 5  93
# 7: 6  83

您需要安装data.table包才能使其正常工作。