这是我的问题:
我有两个数据库。其中一个( BASE1 )有一些墨西哥州及其相应的自治市( 19,138 Obs. )为 2008-2009 年如下:
1. **State Municipality Year ID**
2. Aguascalientes Calvillo 2008 _
3. Aguascalientes Calvillo 2009 _
4. Baja California Tecate 2008 _
5. Baja California Tecate 2009 _
6. (...)
另一个数据库 ( BASE2 ) 包含所有城市的 ID ( 2,457 Obs ):
1. **State Municipality ID**
2. Aguascalientes Calvillo 1001
3. Baja California Tecate 2003
4. (...)
我想要的是为BASE1中的每个观察分配相应的ID(BASE2)。
我创建以下代码:
for (i in 1:2457){
for (j in 1:19138) {
if (BASE_2$MUNICIPALITY_NAME[i]==BASE1$MUNICIPALITY_NAME[j] && BASE2$STATE_NAME[i]==BASE1$STATE_NAME[j]) {
BASE1$MUNICIPALITY_ID[j]=BASE2$MUNICIPALITY_ID[i]
}
}
}
我以这种方式创建代码的原因:
if (BASE_2$MUNICIPALITY_NAME[i]==BASE1$MUNICIPALITY_NAME[j] **&& BASE2$STATE_NAME[i]==BASE1$STATE_NAME[j]**)
是因为有些州有同名的自治市。
代码有效(我用基础的子集测试了它),但是运行时间太长。问题是这样的:
有什么办法可以减少代码工作的时间?因为据我所知,操作次数是 2,457 次 19,138 = 47,022,066(太多了)
最佳答案
你能用合并吗
base1 <- data.frame(key1 = letters[1:6], key2 = letters[7:12], values = 1:6)
base1
key1 key2 values
1 a g 1
2 b h 2
3 c i 3
4 d j 4
5 e k 5
6 f l 6
base2 <- data.frame(key1 = letters[1:6], key2 = letters[7:12], values = 12:17)
base2
key1 key2 values
1 a g 12
2 b h 13
3 c i 14
4 d j 15
5 e k 16
6 f l 17
merge(base1, base2, by = c("key1", "key2"))
key1 key2 values.x values.y
1 a g 1 12
2 b h 2 13
3 c i 3 14
4 d j 4 15
5 e k 5 16
6 f l 6 17
关于r - 在 r 中运行程序的更简单方法。两个 for 的 47,022,066 次操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21395358/