简体   繁体   中英

How can I multiply multiple dataframes of a list by each observation of a vector?

I have a list of dataframes that I would like to multiply for each element of vector.

The first dataframe in the list would be multiplied by the first observation of the vector, and so on, producing another list of dataframes already multiplied.

I tried to do this with a loop, but was unsuccessful. I also tried to imagine something using map or lapply, but I couldn't.

for(i in vec){
  for(j in listdf){
     listdf2 <- i*listdf[[j]]
    }
}

Error in listdf[[j]] : invalid subscript type 'list'

Any idea how to solve this?

*Vector and the List of Dataframes have the same length.

Use Map :

listdf2 <- Map(`*`, listdf, vec)

in purrr this can be done using map2 :

listdf2 <- purrr::map2(listdf, vec, `*`)

If you are interested in for loop solution you just need one loop:

listdf2 <- vector('list', length(listdf))
for (i in seq_along(vec)) {
   listdf2[[i]] <- listdf[[i]] * vec[i]
}

data

vec <- c(4, 3, 5)
df <- data.frame(a = 1:5, b = 3:7)
listdf <- list(df, df, df)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM