Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查变量在R中是否是时不变的_R_Variables_Time_Constants - Fatal编程技术网

检查变量在R中是否是时不变的

检查变量在R中是否是时不变的,r,variables,time,constants,R,Variables,Time,Constants,我试图寻找我的问题的答案,但我找到了Stata的正确答案(我使用的是R) 我正在使用一项全国性调查来研究哪些变量影响补充养老金的投资(在我的国家是自愿的) 调查每两年进行一次,有些人接受了不止一次的采访。我对df进行了过滤,以便只有个人多次发出filter命令。这是已过滤的原始调查的一个示例: year id y.b sex income pens 2002 1 1950 F 100000 0 2002 2 1943 M 5

我试图寻找我的问题的答案,但我找到了Stata的正确答案(我使用的是R)

我正在使用一项全国性调查来研究哪些变量影响补充养老金的投资(在我的国家是自愿的)

调查每两年进行一次,有些人接受了不止一次的采访。我对df进行了过滤,以便只有个人多次发出
filter
命令。这是已过滤的原始调查的一个示例:

year  id  y.b   sex   income   pens   
2002  1   1950   F    100000     0     
2002  2   1943   M    55000      1    
2004  1   1950   F    88000      1    
2004  2   1943   M    66000      1    
2006  3   1966   M    12000      1    
2008  3   1966   M    24000      1    
2008  4   1972   F    33000      0    
2010  4   1972   F    35000      0    
其中id为个人,y.b为出生年份,pens为虚拟值,如果个人投资于补充养老金形式,则取1。 我想运行FE回归,所以我加载
plm
包,然后像这样设置df:

df.p <- plm.data(df, c("id", "year")
df$x <- ifelse(df$id=="1" & df$sex=="F",1,0)
基本思想应该是这样的:

df.p <- plm.data(df, c("id", "year")
df$x <- ifelse(df$id=="1" & df$sex=="F",1,0)

df$x我想你要做的是为每个
id
计算
sex
的唯一值的数量。您希望它是1,但如果是2,则表示转录错误。在R中实现这一点的方法是

any(by(df$sex,df$id,function(x) length(unique(x))) > 1)
要分解这一点,函数
length(unique(x))
会告诉您向量中不同的唯一值的数量。它与因子的
级别
类似(但不完全相同,因为因子可能没有级别)

函数
by
根据
df$id
计算
df$sex
的每个子集上的给定函数。换句话说,它计算
length(unique(df$sex))
其中
df$id
是1,然后是2,以此类推


最后,
any(…>1)
检查是否有任何结果不止一个。如果是,结果将是
TRUE
(您可以使用
which
,而不是
any
,来查找哪些是正确的)。如果一切正常,结果将是
FALSE

我们可以尝试使用
dplyr

示例数据:

df=data.frame(year=c(2002,2002,2004,2004,2006,2008,2008,2010),
              id=c(1,2,1,2,3,3,4,4),
              sex=c("F","M","M","M","M","M","F","F"))
Id 1既是F又是M

library(dplyr)
df%>%group_by(id)%>%summarise(sexes=length(unique(sex)))
# A tibble: 4 x 2
     id sexes
  <dbl> <int>
1     1     2
2     2     1
3     3     1
4     4     1
库(dplyr)
df%%>%分组依据(id)%%>%总结(性别=长度(唯一性(性别)))
#一个tibble:4x2
id性别
1     1     2
2     2     1
3     3     1
4     4     1
然后我们可以过滤:

df%>%group_by(id)%>%summarise(sexes=length(unique(sex)))%>%filter(sexes==2)
# A tibble: 1 x 2
     id sexes
  <dbl> <int>
1     1     2
df%%>%groupby(id)%%>%summary(性别=长度(唯一(性别)))%%>%filter(性别==2)
#一个tibble:1x2
id性别
1     1     2
df$x