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

时间:2015-05-21 00:16:26

标签: r panel

我觉得这应该很容易,但不知所措,希望你们都能提供帮助。我有from scipy.optimize import curve_fit # define function to fit ffunc = lambda x, a, x0, s: a*exp(-0.5*(x-x0)**2/s**2) # fit with initial guess a=100, x0=5, s=2 p, _ = curve_fit(ffunc, x, intList, p0=[100,5,2]) x0 = p[1] # location of the mean # plot plot(x, intList) plot(x, ffunc(x, *p)) axvline(x0, color='r', ls='--') 个变量的面板数据,这里只是id

v1

我只想创建一个虚拟变量,指示id v1 A 14 A 15 B 12 B 13 B 14 C 11 C 12 C 13 D 14 面板中是否存在v1(例如12)的值。如下所示:

id

我觉得这应该很简单,但无法找出一个简单的一线解决方案。

非常感谢!

1 个答案:

答案 0 :(得分:6)

尝试

library(dplyr)
df %>% group_by(id) %>% mutate(v2 = as.numeric(any(v1 == 12)))

或者根据@akrun建议:

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

注意:将0L添加到any()创建的逻辑值会将TRUE/FALSE切换为01 s

另一种方法可能是使用ave

df$v2 <- with(df, ave(v1, id, FUN = function(x) any(x == 12)))

给出了:

#  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