I have so many subdatasets in the list and so listing each dataset would be cumbersome and very tedious. Is there a way to achieve this using either lapply or purrr? Thanks in advance.
library(dplyr)
mydata <- list(data.frame(
A = c(1, 2, 3),
B = c("Test1", "Test2", "Test3")),
data.frame(
A = c(10, 21, 30),
B = c("Test10", "Test24", "Test32")))
names(mydata) <- c("dat1", "dat2")
mydata$dat1 <- mydata$dat1 %>%
mutate(id = "dat1")
mydata$dat2 <- mydata$dat2 %>%
mutate(id = "dat2")
CodePudding user response:
A base R solution can be to use Map, i.e.
Map(function(x, y)transform(x, id = y), mydata, paste0('dat', seq(length(mydata))))
CodePudding user response:
This should do the trick:
listNames <- c("dat1", "dat2")
names(mydata) <- listNames
mydata <- lapply(
listNames,
function(x) {
mydata[[x]] %>% mutate(id = x)
}
)
names(mydata) <- listNames
mydata
$dat1
A B id
1 1 Test1 dat1
2 2 Test2 dat1
3 3 Test3 dat1
$dat2
A B id
1 10 Test10 dat2
2 21 Test24 dat2
3 30 Test32 dat2
CodePudding user response:
Another approach with lapply,
invisible(lapply(seq(mydata), function(x) mydata[[x]]['id'] <<-names(mydata[x])))
mydata
gives,
$dat1
A B id
1 1 Test1 dat1
2 2 Test2 dat1
3 3 Test3 dat1
$dat2
A B id
1 10 Test10 dat2
2 21 Test24 dat2
3 30 Test32 dat2
