【发布时间】:2018-04-29 23:10:03
【问题描述】:
我猜这个问题很具体。
我正在寻找Stata egen函数的R等价物,特别是
egen max BY varlist。
在我的数据表中,我有一列带有 ID
ID <- c(1,1,2,2,3,4,5,6,6)
带有观察年份的列
year <- c(2000,2000,2001,2002,2002,2003,2004,2004,2004)
年份和 ID 不是唯一的,因为一年内可以有更多的观测值。
最后我有一列有名字
names <- c("Mark",NA,"John","John",NA,"Sarah","Julia",NA,NA).
首先,我想生成一个等于 1 的虚拟对象,如果名称不是 NA 并且我认为
dummy <- ifelse(!is.na(names),1,0)
然后我希望 R 根据 ID 和年份返回虚拟对象的最大值,在 Stata 中是
egen MAX = max(dummy), by(ID year)
在实践中,如果所有具有相同 ID 和年份的行的名称为 NA,我希望 R 返回 0。所以我会得到 (1,1,1,1,0,1,1,0,0),我可以继续删除第 5,7,8 行。 谢谢!
【问题讨论】:
-
谢谢,但似乎没有用。 complete.cases(ID,year,names) 返回 [1] TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE FALSE 这不是我想要的。
-
你想要
!with(dat, ave(is.na(names), list(ID,year), FUN=all))或类似的吗?dat是dat <- data.frame(ID,year,names, stringsAsFactors=FALSE) -
@thelatemail 是的,也许问题不是很清楚,但这会返回正确的结果。我试图查看帮助页面,但我并不完全清楚为什么会这样。你能解释一下为什么我们用 FUN=all 取平均值吗?编辑:下面已经回答了
标签: r max dummy-variable