【问题标题】:error in recoding重新编码错误
【发布时间】:2013-02-26 21:53:41
【问题描述】:

尝试使用epicalc 包将R 中的缺失值重新编码为NA,我收到以下错误:

 recode(trstlglR, 99 , NA, dataFrame=ESSround5)
 Error in search()[[pos]] : attempt to select more than one element

虽然该命令似乎做了我想做的事,但我担心我遗漏了一些东西。数据框太大,无法检查每个值。有人有这方面的经验吗?

可复制的例子:

structure(list(trstlglR = c(0L, 0L, 0L, 1L, NA, NA, NA, NA, 0L, 
0L), trstplcR = c(0L, 0L, 0L, 0L, 0L, NA, NA, 0L, 0L, 0L), plcarcrR = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, NA, NA)), .Names = c("trstlglR", 
"trstplcR", "plcarcrR"), row.names = c(1L, 2L, 3L, 5714L, 2450L, 
2980L, 3837L, 6136L, 2197L, 2198L), class = "data.frame")

【问题讨论】:

  • 似乎你必须先做use(ESSround5),然后再做recode。
  • @Arun 确实错误消失了。
  • @GaryWeissman,你不需要apply。你可以这样做:df$x[df$x == 99] <- NA

标签: r


【解决方案1】:

如果您查看?recode,示例首先会:

use(.data)

在运行recode 之前。现在,如果您阅读?use 的内容,您会发现:

“使用”从 Dbase (.dbf)、Stata (.dta)、SPSS(.sav)、EpiInfo(.rec) 和逗号分隔值 (.csv) 格式以及 R 数据帧中读取数据集。目标数据框保存在内存中,默认为“.data”,并自动附加到搜索路径。 此设置是 'epicalc' 的其他命令的基础,包括 'des'、'summ'、'recode'、'label.var' 等。

所以你要做的是:

set.seed(45)
df <- data.frame(x=sample(1:3, 20, replace=T), y=sample(20))

use(df) # first to copy this to .data and attach.
recode(x, 2, NA, df) # not it should work without errors

#     x  y
# 1  NA 15
# 2  NA  6
# 3  NA  3
# 4   3  8
# 5  NA  1
# 6  NA 16
# 7   3  5
# 8   3  9
# 9   1 10
# 10  3 20
# 11 NA 11
# 12  1  4
# 13 NA  2
# 14 NA 12
# 15  1 13
# 16  3 17
# 17 NA 18
# 18  3 19
# 19  1  7
# 20  1 14

【讨论】:

  • 虽然错误消失了,但我的最大值现在仍然是 99? &gt; use(ESSround5) &gt; recode(trstlglR, 99 , NA, ESSround5) &gt; summary(trstlglR) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.0000 0.0000 0.0000 0.1798 0.0000 99.0000
  • 您确定有 > 99 的值吗?我已经编辑了帖子以显示我的示例的输出。而且它似乎做得对..
  • 不大于 99,正好是 99。这是肯定的,因为在摘要中 max = 99。它们应该大于吗?
  • 如果您希望我调试您的数据发生了什么,请通过编辑您的帖子来发布您的数据。我无权访问它,我所能做的就是说它在我发布的测试示例中有效。
  • 您可以查看我的帖子以了解我(或 SO 社区)如何期望数据具有可重现的示例。
猜你喜欢
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多