我正在尝试从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;的对象。
有什么想法吗?
答案 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包才能使其正常工作。