我实际上正在运行计量经济学分析。我在这个分析中遇到了问题。我正在使用Rstudio。
我的数据库由1408(类型1为704,类型2为704)观察和49个变量组成。
Gender Period Matching group Group Type Overcharging
1 1 73 1 1 NA
0 2 73 1 1 NA
1 1 77 2 1 NA
1 2 77 2 1 NA
... ... ... ... ... ...
0 1 73 1 2 1
0 2 73 1 2 0
1 1 77 2 2 0
1 2 77 2 2 1
... ... ... ... ... ...
您可以看到NA值与代理的类型相关(如果代理是类型1)。我想要做的是:如果类型1的代理属于相同的匹配组,代理的组和周期类型2,则将NA替换为类型2的代理的相同值(对于每一行)。 / p>
Expected output
Gender Period Matching group Group Type Overcharging
1 1 73 1 1 1
0 2 73 1 1 0
1 1 77 2 1 0
1 2 77 2 1 1
0 1 73 1 2 1
0 2 73 1 2 0
1 1 77 2 2 0
1 2 77 2 2 1
感谢您的时间和考虑!感谢帮助。
答案 0 :(得分:0)
以下是data.table
的解决方案:
library("data.table")
dt <- fread(header=TRUE,
'Gender Period Matching.group Group Type Overcharging
1 1 73 1 1 NA
0 2 73 1 1 NA
1 1 77 2 1 NA
1 2 77 2 1 NA
0 1 73 1 2 1
0 2 73 1 2 0
1 1 77 2 2 0
1 2 77 2 2 1')
d2 <- dt[Type!=1, Overcharging, .(Group,Period)]
rbind(dt[Type==1][d2, on=.(Group, Period), Overcharging:=i.Overcharging],dt[Type!=1])
# > rbind(dt[Type==1][d2, on=.(Group, Period), Overcharging:=i.Overcharging],dt[Type!=1])
# Gender Period Matching.group Group Type Overcharging
# 1: 1 1 73 1 1 1
# 2: 0 2 73 1 1 0
# 3: 1 1 77 2 1 0
# 4: 1 2 77 2 1 1
# 5: 0 1 73 1 2 1
# 6: 0 2 73 1 2 0
# 7: 1 1 77 2 2 0
# 8: 1 2 77 2 2 1
最终你可以在你的特殊情况下做:
dt[Type==1, Overcharging:=dt[Type!=1, Overcharging]]
(如果Type!=1
的组和期间的顺序与Type==1
的顺序相同)
答案 1 :(得分:0)
我们可以使用dplyr
和tidyr
(来自tidyverse
)的功能来执行此类任务。来自fill
的{{1}}函数可以根据前一行或下一行来估算缺失值。因此,我们的想法是先排列数据框,然后使用tidyr
来估算fill
列中的所有NA
。
Overcharging