问题描述
这是 2005-2015 年国家间面板数据。
安排如下。
年 iso_i 行业 iso_j thetaij
2005 ARG D01T03 AUS 0
2005 澳大利亚 D01T03 ARG 0
年份和行业相同的两行,Iso_i和Iso_j相交。 我想将这两行视为重复行,只留下一行。
如果按照这个标准去掉,就只剩下总行数的一半了。
我想出了如何使用 Excel 宏文件进行操作,但面板数据中的总行数为 480,000,并且在 Excel 中不起作用...
我想我必须在 R 上做。 你能告诉我解决方案吗?
解决方法
据我所知,您并不关心这些重复行中的最后两列是否不同。如果是这种情况,这将起作用(只需将 df
更改为您的数据框的名称):
library(dplyr)
id <- which(duplicated(select(df,year,iso_i,industry))
length(id) # check number of duplicates
df<- df[-id,]
,
建议创建一个按字母顺序粘贴 iso_i 和 iso_j 字段的新列。这就是带有 mutate
的 if_else
正在做的事情。分组 (group_by
) 将消除重复行。 summarise
保留原始数据,假设它们与您所说的相同(所以只取第一个元素):
dt <- tibble(year = c(2005,2005),iso_i = c("ARG","AUS"),industry = c("D01T03","D01T03"),iso_j = c("AUS","ARG"),thetai_j = c(0,0))
dt <- dt %>%
mutate(iso_ij = if_else(iso_i > iso_j,paste0(iso_j,sep = " "),paste0(iso_i,iso_j,sep = " "))) %>%
group_by(year,industry,iso_ij) %>%
summarise(thetai_j = first(thetai_j),iso_i = first(iso_i),iso_j = first(iso_j)) %>%
select(year,thetai_j)
(dt)
最后的 select
命令是以相同的顺序保存信息。