我觉得这应该很容易,但不知所措,希望你们都能提供帮助。我有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
我觉得这应该很简单,但无法找出一个简单的一线解决方案。
非常感谢!
答案 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
切换为0
和1
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