Home > Blockchain >  Using Map on Function if name of df lists match
Using Map on Function if name of df lists match

Time:12-10

I have given a

a namend vector col:

 col <- c(id = "CLUSTER", x = "LONGNUM", y = "LATNUM", n = "Severely.stunted.child.under.5.years..Total", pos = "Severely.stunted.child.under.5.years.Yes")

#a List of Dataframes with the the Elements of col as Columns and namend after a specific study area. (see deput below) The List Results contains 19 different files (different years)

a list of shapefiles of with 6 Elements (corresponding countries):

study_area <- c("Ethiopia", "Liberia", "Malawi", "Rwanda", "Uganda", "Zimbabwe")
Countries <- lapply(study_area, function(x){gisco_get_countries(country=  x, resolution = 60 )})
Countries <- lapply(Countries, function(x) {as_Spatial(x, cast = TRUE, IDs = c("CNTR_NAME", "ISO§_CODE", "CNRT_ID", "NAME_ENGL", "FID"))})
names(Countries) <- study_area

I would like to preform the function from the prevR Library :

s.prevR(Results[[1]], col, Countries[[1]])

But actually for every element in the lists where the names fit:

I tried something like: Map(function(x, y) { as.prevR(x, col, y)}, Results, Countries)

But there it does (obviously) not match by names of x and y

dput( dput(Results[[1]][1:5,1:24])
structure(list(CLUSTER = c("", "1", "10", "100", "101"), Severely.stunted.child.under.5.years.No = c(3438, 
8, 7, 9, 6), Severely.stunted.child.under.5.years.Yes = c(1047, 
4, NA, 7, 1), Severely.stunted.child.under.5.years..Total = c(4485, 
12, 7, 16, 7), Stunted.child.under.5.years.No = c(2531, 2, 7, 
7, 5), Stunted.child.under.5.years.Yes = c(1954, 10, NA, 9, 2
), Stunted.child.under.5.years..Total = c(4485, 12, 7, 16, 7), 
    Severely.wasted.child.under.5.years.No = c(4295, 11, 7, 16, 
    7), Severely.wasted.child.under.5.years.Yes = c(190, 1, NA, 
    NA, NA), Severely.wasted.child.under.5.years..Total = c(4485, 
    12, 7, 16, 7), Wasted.child.under.5.years.No = c(3957, 10, 
    7, 16, 6), Wasted.child.under.5.years.Yes = c(528, 2, NA, 
    NA, 1), Wasted.child.under.5.years..Total = c(4485, 12, 7, 
    16, 7), Severely.underweight.child.under.5.years.No = c(4028, 
    10, 7, 12, 7), Severely.underweight.child.under.5.years.Yes = c(457, 
    2, NA, 4, NA), Severely.underweight.child.under.5.years..Total = c(4485, 
    12, 7, 16, 7), Underweight.child.under.5.years.No = c(3185, 
    7, 7, 12, 5), Underweight.child.under.5.years.Yes = c(1300, 
    5, NA, 4, 2), Underweight.child.under.5.years..Total = c(4485, 
    12, 7, 16, 7), LATNUM = c(NA, 10.889096, 5.323272, 8.830199, 
    10.806748), LONGNUM = c(NA, 37.269565, 39.556812, 40.72964, 
    39.7703), SurveyId = c("ET2005DHS", "ET2005DHS", "ET2005DHS", 
    "ET2005DHS", "ET2005DHS"), DHSC = c("ET", "ET", "ET", "ET", 
    "ET"), Country = c("Ethiopia", "Ethiopia", "Ethiopia", "Ethiopia", 
    "Ethiopia")), row.names = c(NA, 5L), class = "data.frame")

and Countries

dput(Countries[[1]])
new("SpatialPolygonsDataFrame", data = structure(list(CNTR_NAME = "Federal Democratic Republic of Ethiopia", 
    ISO3_CODE = "ETH", CNTR_ID = "ET", NAME_ENGL = "Ethiopia", 
    FID = "ET"), class = "data.frame", row.names = 1L), polygons = list(
    new("Polygons", Polygons = list(new("Polygon", labpt = c(39.6420582930584, 
    8.63562315843106), area = 93.13026982, hole = FALSE, ringDir = 1L, 
        coords = structure(c(41.6307, 42.4043, 41.816, 41.8348, 
        42.9681, 42.7628, 42.9804, 43.9589, 45.6126, 46.9411, 
        47.8524, 45.6126, 45.4747, 45.2923, 44.9162, 43.4741, 
        42.8138, 41.9101, 41.2328, 40.708, 39.9305, 39.5667, 
        38.9731, 38.1026, 36.9621, 35.9477, 35.8294, 35.3235, 
        35.0325, 34.9588, 34.5428, 33.7557, 33.0448, 33.2485, 
        33.8204, 34.0937, 34.1132, 34.4181, 34.8021, 35.2153, 
        35.6227, 36.1342, 36.5603, 37.2972, 37.5268, 37.9201, 
        38.5391, 39.0217, 40.0851, 40.8941, 41.6307, 13.3913, 
        12.4686, 11.6292, 11.0448, 10.9974, 10.7159, 10.0644, 
        9.0545, 8.4674, 8.0224, 7.9151, 5.5657, 5.4241, 5.2367, 
        4.9368, 4.7993, 4.301, 3.9823, 3.9616, 4.2326, 3.8858, 
        3.5224, 3.5158, 3.6459, 4.3833, 4.62, 5.2367, 5.413, 
        5.8494, 6.4537, 6.7418, 7.6074, 7.899, 8.381, 8.4168, 
        8.6026, 9.4986, 10.6735, 10.8052, 11.9187, 12.5064, 12.8315, 
        14.2577, 14.3876, 14.2588, 14.8128, 14.4413, 14.5899, 
        14.5456, 14.0891, 13.3913), dim = c(51L, 2L)))), plotOrder = 1L, 
        labpt = c(39.6420582930584, 8.63562315843106), ID = "1", 
        area = 93.13026982)), plotOrder = 1L, bbox = structure(c(33.0448, 
3.5158, 47.8524, 14.8128), dim = c(2L, 2L), dimnames = list(c("x", 
"y"), c("min", "max"))), proj4string = new("CRS", projargs = " proj=longlat  datum=WGS84  no_defs"))

CodePudding user response:

If the Countries names are all in the Results names and if 'Results' have duplicates for names, then we can make the Countries to have the same length by replicating based on the names of the 'Results'

Map(function(x, y) { as.prevR(x, col, y)}, Results, Countries[names(Results)])
  • Related