Относительно этого OP мы можем связать строку с соответствующим фреймом данных, используя следующий код:
options(stringsAsFactors = FALSE)
games <- data.frame(index = c(1,2,3), player = c('John', 'Sam', 'Mary'))
weather <- data.frame(index = c(1,2,3), temperature = c('hot', 'cold', 'rainy'))
list1 <- list(games = games, weather = weather)
games <- list()
weather <- data.frame(index = c(1,2,3), temperature = c('cold', 'rainy', 'hot'))
cars <- data.frame(index = c(1,2,3), car = c('honda', 'toyota','bmw'))
list2 <- list(games = games, weather = weather, cars = cars)
games <- data.frame(index = c(1,2,3), player = c('Peter', 'Kevin', 'Mary'))
weather <- list()
list3 <- list(games = games, weather = weather)
all_list <- list(list1, list2, list3)
all_names <- all_list %>% map(names) %>% reduce(union)
list(list1, list2, list3) %>%
transpose(.names = all_names) %>%
map(dplyr::bind_rows)
Возвращает,
$`games`
index player
1 1 John
2 2 Sam
3 3 Mary
4 1 Peter
5 2 Kevin
6 3 Mary
$weather
index temperature
1 1 hot
2 2 cold
3 3 rainy
4 1 cold
5 2 rainy
6 3 hot
$cars
index car
1 1 honda
2 2 toyota
3 3 bmw
Допустим, спискиимпортируются из разных файлов, например, list1, list2 и list3 из 1001.csv, 2005.csv и 3009.csv соответственно
Если я хочу добавить столбцы, соответствующие имени файла, чтобы возвращатьбудет выглядеть следующим образом:
$`games`
index player userid
1 1 John 1001
2 2 Sam 1001
3 3 Mary 1001
4 1 Peter 3009
5 2 Kevin 3009
6 3 Mary 3009
$weather
index temperature userid
1 1 hot 1001
2 2 cold 1001
3 3 rainy 1001
4 1 cold 2005
5 2 rainy 2005
6 3 hot 2005
$cars
index car userid
1 1 honda 2005
2 2 toyota 2005
3 3 bmw 2005
Я пытался использовать, но безуспешно.
file.nm <- gsub(".csv", "",file.list)
list(list1, list2, list3) %>% map(function(x) bind_cols(x, file.nm)) %>%
transpose(.names = all_names) %>%
map(dplyr::bind_rows)
, где file.list
- вектор, содержащий имя файла (.csv)
Не могли бы вы дать мне предложения?