我有一个数据帧,其中每一行代表一个空间单元.nbid*变量表示哪个单元是相邻单元.我想把邻居的dum变量放入主数据帧.(它可以是数据框架内的任何类型的关系,而不是空间单元-业务伙伴、亲属、相关基因等.)
seed(999)
df_base <- data.frame(id = seq(1:100),
dum= sample(c(rep(0,50), rep(1,50)),100),
nbid_1=sample(1:100,100),
nbid_2=sample(1:100,100),
nbid_3=sample(1:100,100)) %>%
mutate(nbid_1 = replace(nbid_1, sample(row_number(), size = ceiling(0.1 * n()), replace = FALSE), NA),
nbid_2 = replace(nbid_2, sample(row_number(), size = ceiling(0.3 * n()), replace = FALSE), NA),
nbid_3 = replace(nbid_3, sample(row_number(), size = ceiling(0.7 * n()), replace = FALSE), NA))
(在这些简化数据中,而不是在真实数据中,邻居1、2和3可以是相同的,但这与问题无关.)
我的方法是复制并连接数据,如下所示:
df1 <- df_base
df2 <- df_base %>%
select(-c(nbid_1,nbid_2,nbid_3)) %>%
rename(nbdum=dum)
df <- left_join(df1,df2,by=c("nbid_1"="id")) %>%
rename(nbdum1=nbdum) %>%
left_join(.,df2,by=c("nbid_2"="id")) %>%
rename(nbdum2=nbdum) %>%
left_join(.,df2,by=c("nbid_3"="id")) %>%
rename(nbdum3=nbdum)
df是我正在寻找的结果-从这里我可以创建一个整体邻居虚拟或计数.
我如何才能以不那么笨拙的方式解决这个问题?
提前感谢您的 idea !!