【发布时间】:2022-01-08 14:33:30
【问题描述】:
我正在将 Stata 代码翻译成 R 代码,但现在我遇到了一些类似这样的问题。
这是我的 Stata 代码:
gen aposentadofam=1 if proprendaposent > 0 & proprendaposent ~=.;
replace aposentadofam=0 if proprendaposent == 0 | proprendaposent ==.;
这就是我在 R 中尝试做的事情:
# pemg <- mutate(pemg, aposentadofam = NA_real_)
# pemg <- mutate(pemg, aposentadofam = case_when(proprendaposent >0 & !is.na(proprendaposent) ~ 1, TRUE ~ aposentadofam))
# pemg <- mutate(pemg, aposentadofam = case_when(proprendaposent==0 | is.na(proprendaposent) ~ 0, TRUE ~ aposentadofam))
is.na() 的行似乎运行正常,但!is.na() 的行却没有。它给了我这个错误信息:
LHS of case 1 (`proprendaposent > 0 & !is.na(proprendaposent) ~ 1`) must be a logical vector, not a `formula` object.
我该怎么办?
【问题讨论】:
-
如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
-
给出的代码不是惯用的Stata。您冗长的变量名称无疑是信息丰富且适合您的情况,但是为了专注于原则,让我们使用更短的名称。
gen wanted = foo > 0 & foo != .表格可以让您一举两得。尽管它可能不会在您的上下文中咬人,但您的代码也会将扩展的缺失值.a映射到.z到 0。gen wanted = foo > 0 & !missing(foo)也可以。我在那里复制foo永远不会消极的含义。尽管此评论完全是关于 Stata 风格,但我怀疑您是否有义务在 R 中使用两行。 -
感谢您的反馈!这个 Stata 代码不是我的,所以
!missing()是我不能用太多的东西。而这双代码行会通过代码重复多次,所以...