在R中的面板数据中创建指示符变量

dcg*_*y78 3 r panel

我觉得这应该很容易,但不知所措,并希望你们都能提供帮助.我有面板数据,通过id变量,这里只是v1:

id  v1
A   14
A   15
B   12
B   13
B   14 
C   11
C   12 
C   13
D   14
Run Code Online (Sandbox Code Playgroud)

我只想创建一个虚拟变量,指示面板中是否存在v1(例如12)的值id.所以类似于:

id  v1  v2
A   14  0
A   15  0 
B   12  1
B   13  1
B   14  1 
C   11  1
C   12  1 
C   13  1
D   14  0
Run Code Online (Sandbox Code Playgroud)

我觉得这应该很简单,但无法弄清楚一个简单的一线解决方案.

非常感谢!

Ste*_*pré 6

尝试

library(dplyr)
df %>% group_by(id) %>% mutate(v2 = as.numeric(any(v1 == 12)))
Run Code Online (Sandbox Code Playgroud)

或者按照@akrun的建议:

library(data.table)
setDT(df)[, v2 := any(v1 ==12)+0L, id]
Run Code Online (Sandbox Code Playgroud)

注意:添加0L到创建的逻辑值any()将切换TRUE/FALSE0s和1s.

另一种方法可能是使用ave:

df$v2 <- with(df, ave(v1, id, FUN = function(x) any(x == 12)))
Run Code Online (Sandbox Code Playgroud)

这使:

#  id v1 v2
#1  A 14  0
#2  A 15  0
#3  B 12  1
#4  B 13  1
#5  B 14  1
#6  C 11  1
#7  C 12  1
#8  C 13  1
#9  D 14  0
Run Code Online (Sandbox Code Playgroud)