R中的双重嵌套函数
Double nested function in R
我有以下代码:
mdf[,c(4)]<- mdf$`CLAVE EMISORA` %in% BMV[[1]]$`CLAVE EMISORA`
mdf[,c(5)]<- mdf$`CLAVE EMISORA` %in% BMV[[2]]$`CLAVE EMISORA`
...............................................................
mdf[,c(13)]<- mdf$`CLAVE EMISORA` %in% BMV[[10]]$`CLAVE EMISORA`
它基本上对列的每一行的内容是否包含在列表中的数据框的列中进行逻辑测试。结果是沿着一系列列进行逻辑测试,告诉我它包含在哪里,因为我已将第 4-13 列指定为每个列表中每一行是否存在的二分变量。但现在我想减少代码,而不是将结果映射到不同的列,我想使用具有级别 (1-10) 的单个列,其中每个级别都等于 i 列表。
我试过使用嵌套的 for 循环,但它不起作用。
for (i in mdf$`CLAVE EMISORA`){
for (x in 1:10)
if (mdf$`CLAVE EMISORA` %in% BMV[[x]]$`CLAVE EMISORA`)
mdf$`SECTOR` <- x
}
示例数据库:
`CLAVE EMISORA` `RAZON SOCIAL` SECTOR
<chr> <chr> <lgl>
1 AC ARCA CONTINENTAL, S.A.B. DE C.V. NA
2 ACCELSA ACCEL, S.A.B. DE C.V. NA
3 ACTINVR CORPORACION ACTINVER, S.A.B. DE C.V. NA
4 AEROMEX GRUPO AEROMÉXICO, S.A.B. DE C.V. NA
5 AGRIEXP AGRO INDUSTRIAL EXPORTADORA, S.A. DE C.V. NA
6 AGUA GRUPO ROTOPLAS, S.A.B. DE C.V. NA
7 AHMSA ALTOS HORNOS DE MEXICO, S.A. DE C.V. NA
8 ALEATIC ALEATICA, S.A.B. DE C.V. NA
9 ALFA ALFA, S.A.B. DE C.V. NA
10 ALPEK ALPEK, S.A.B. DE C.V. NA
示例列表
CLAVE EMISORA RAZON SOCIAL
1 3391 TSURUHA HOLDINGS, INC.
2 4911 SHISEIDO COMPANY, LIMITED
3 ABEV AMBEV S.A.
4 AC ARCA CONTINENTAL, S.A.B. DE C.V.
5 ACBE AC BEBIDAS, S. DE R.L. DE C.V.
看起来你想要的只是像这样简单地迭代你的 10 个索引并执行你的操作。
for (i in 1:10) {
mdf[,i + 3]<- mdf$`CLAVE EMISORA` %in% BMV[[i]]$`CLAVE EMISORA`
}
如果需要,您可以用一些编程方式替换 i+3
以获得更好的列名。
我有以下代码:
mdf[,c(4)]<- mdf$`CLAVE EMISORA` %in% BMV[[1]]$`CLAVE EMISORA`
mdf[,c(5)]<- mdf$`CLAVE EMISORA` %in% BMV[[2]]$`CLAVE EMISORA`
...............................................................
mdf[,c(13)]<- mdf$`CLAVE EMISORA` %in% BMV[[10]]$`CLAVE EMISORA`
它基本上对列的每一行的内容是否包含在列表中的数据框的列中进行逻辑测试。结果是沿着一系列列进行逻辑测试,告诉我它包含在哪里,因为我已将第 4-13 列指定为每个列表中每一行是否存在的二分变量。但现在我想减少代码,而不是将结果映射到不同的列,我想使用具有级别 (1-10) 的单个列,其中每个级别都等于 i 列表。 我试过使用嵌套的 for 循环,但它不起作用。
for (i in mdf$`CLAVE EMISORA`){
for (x in 1:10)
if (mdf$`CLAVE EMISORA` %in% BMV[[x]]$`CLAVE EMISORA`)
mdf$`SECTOR` <- x
}
示例数据库:
`CLAVE EMISORA` `RAZON SOCIAL` SECTOR
<chr> <chr> <lgl>
1 AC ARCA CONTINENTAL, S.A.B. DE C.V. NA
2 ACCELSA ACCEL, S.A.B. DE C.V. NA
3 ACTINVR CORPORACION ACTINVER, S.A.B. DE C.V. NA
4 AEROMEX GRUPO AEROMÉXICO, S.A.B. DE C.V. NA
5 AGRIEXP AGRO INDUSTRIAL EXPORTADORA, S.A. DE C.V. NA
6 AGUA GRUPO ROTOPLAS, S.A.B. DE C.V. NA
7 AHMSA ALTOS HORNOS DE MEXICO, S.A. DE C.V. NA
8 ALEATIC ALEATICA, S.A.B. DE C.V. NA
9 ALFA ALFA, S.A.B. DE C.V. NA
10 ALPEK ALPEK, S.A.B. DE C.V. NA
示例列表
CLAVE EMISORA RAZON SOCIAL
1 3391 TSURUHA HOLDINGS, INC.
2 4911 SHISEIDO COMPANY, LIMITED
3 ABEV AMBEV S.A.
4 AC ARCA CONTINENTAL, S.A.B. DE C.V.
5 ACBE AC BEBIDAS, S. DE R.L. DE C.V.
看起来你想要的只是像这样简单地迭代你的 10 个索引并执行你的操作。
for (i in 1:10) {
mdf[,i + 3]<- mdf$`CLAVE EMISORA` %in% BMV[[i]]$`CLAVE EMISORA`
}
如果需要,您可以用一些编程方式替换 i+3
以获得更好的列名。