Объединить несколько фреймов данных в другой список - PullRequest
2 голосов
/ 03 марта 2020

Я хочу объединить одну ДФ с несколькими логическими векторами. Вот пример того, что я хочу:

a <- c(1, 2, 3, 4, 5)
b <- c(1.1, 5.4, 9.3, 6.1 ,4.5)
df <- data.frame(cbind(a,b))
df1 <- data.frame(cbind(a,b))
df2 <- data.frame(cbind(a,b))
list1 <- list(df, df1, df2)

В моих данных df1 и df2 отличаются от df, но это проще. У меня есть свой логический вектор, и я хочу связать их с первым df первого списка.

vc <- c(TRUE, FALSE, TRUE, TRUE,FALSE)
vc1 <- c(FALSE, FALSE, TRUE, TRUE, FALSE)
vc2 <- c(TRUE, TRUE, TRUE, TRUE, TRUE)
list2 <- list(vc, vc1, vc2)

Я знаю, как сделать это по одному.

list2[[1]] <- cbind(vc, df)
list2[[2]] <- cbind(vc1, df)
list2[[3]] <- cbind(vc2, df)

Таким образом, конечный результат будет:

list2
[[1]]
     vc a   b
1  TRUE 1 1.1
2 FALSE 2 5.4
3  TRUE 3 9.3
4  TRUE 4 6.1
5 FALSE 5 4.5

[[2]]
    vc1 a   b
1 FALSE 1 1.1
2 FALSE 2 5.4
3  TRUE 3 9.3
4  TRUE 4 6.1
5 FALSE 5 4.5

[[3]]
   vc2 a   b
1 TRUE 1 1.1
2 TRUE 2 5.4
3 TRUE 3 9.3
4 TRUE 4 6.1
5 TRUE 5 4.5

Но у меня действительно много данных, и мне понадобятся "годы", чтобы это сделать.

Ответы [ 3 ]

2 голосов
/ 03 марта 2020

Если вы намеревались использовать все предоставленные вами объекты: Поместите векторы и фреймы данных в списки и cbind их по одному, используя Map.

Map(cbind, vc=list(vc, vc1, vc2), list(df, df1, df2))
# [[1]]
#      vc a   b
# 1  TRUE 1 1.1
# 2 FALSE 2 5.4
# 3  TRUE 3 9.3
# 4  TRUE 4 6.1
# 5 FALSE 5 4.5
# 
# [[2]]
#      vc a   b
# 1 FALSE 1 1.1
# 2 FALSE 2 5.4
# 3  TRUE 3 9.3
# 4  TRUE 4 6.1
# 5 FALSE 5 4.5
# 
# [[3]]
#     vc a   b
# 1 TRUE 1 1.1
# 2 TRUE 2 5.4
# 3 TRUE 3 9.3
# 4 TRUE 4 6.1
# 5 TRUE 5 4.5
2 голосов
/ 03 марта 2020

Опция с bind_cols и map

library(purrr)
map(list2, ~ bind_cols(l = .x, df))
2 голосов
/ 03 марта 2020

Вы можете использовать здесь:

a <- c(1, 2, 3, 4, 5)
b <- c(1.1, 5.4, 9.3, 6.1 ,4.5)
df <- data.frame(a,b)

vc <- c(TRUE, FALSE, TRUE, TRUE,FALSE)
vc1 <- c(FALSE, FALSE, TRUE, TRUE, FALSE)
vc2 <- c(TRUE, TRUE, TRUE, TRUE, TRUE)
list2 <- list(vc, vc1, vc2)

lapply(list2, function(l) cbind(l, df))
#> [[1]]
#>       l a   b
#> 1  TRUE 1 1.1
#> 2 FALSE 2 5.4
#> 3  TRUE 3 9.3
#> 4  TRUE 4 6.1
#> 5 FALSE 5 4.5
#> 
#> [[2]]
#>       l a   b
#> 1 FALSE 1 1.1
#> 2 FALSE 2 5.4
#> 3  TRUE 3 9.3
#> 4  TRUE 4 6.1
#> 5 FALSE 5 4.5
#> 
#> [[3]]
#>      l a   b
#> 1 TRUE 1 1.1
#> 2 TRUE 2 5.4
#> 3 TRUE 3 9.3
#> 4 TRUE 4 6.1
#> 5 TRUE 5 4.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...