со второй итерацией в R - PullRequest
       11

со второй итерацией в R

0 голосов
/ 09 апреля 2019

У меня есть два списка, один из которых содержит 2 data.frames, а другой содержит 2 вектора.

Мне нужно задать имена столбцов в data.frames для векторов в другом списке, похоже, я не могу понять, как это сделать с помощью lapply.

Воспроизводимый пример:

set.seed(1)
df1 <- data.frame(
  X = sample(1:10),
  Y = sample(c("yes", "no"), 10, replace = TRUE)
)

df2 <- data.frame(
    Z = sample(LETTERS,10),
    X = sample(1:10),
    Y = sample(c("yes", "no"), 10, replace = TRUE)
)
dataframes <- list(df1, df2)
columns <- list(c("numbers", "boolean"),c("letters", "numbers", "boolean"))

Фреймы данных имеют разное количество столбцов, а имена столбцов сильно отличаются в моих исходных данных. То, что я пытался сделать, это отобразить список столбцов как имена столбцов для фреймов данных, используя lapply, но мне нужно перебрать columns, и я не знаю, как это сделать.

Ответы [ 2 ]

6 голосов
/ 09 апреля 2019
Map(setNames, dataframes, columns)

# [[1]]
#    numbers boolean
# 1        3     yes
# 2        4     yes
# 3        5      no
# 4        7     yes
# 5        2      no
# 6        8     yes
# 7        9      no
# 8        6      no
# 9       10     yes
# 10       1      no
# 
# [[2]]
#    letters numbers boolean
# 1        Y       5      no
# 2        F       6      no
# 3        P       4      no
# 4        C       2      no
# 5        Z      10      no
# 6        I       8      no
# 7        A       9     yes
# 8        H       1     yes
# 9        X       7      no
# 10       V       3      no
2 голосов
/ 09 апреля 2019

С tidyverse мы можем использовать map2

library(tidyverse)
map2(dataframes, columns, set_names)
#[[1]]
#   numbers boolean
#1        3     yes
#2        4     yes
#3        5      no
#4        7     yes
#5        2      no
#6        8     yes
#7        9      no
#8        6      no
#9       10     yes
#10       1      no

#[[2]]
#   letters numbers boolean
#1        Y       5      no
#2        F       6      no
#3        P       4      no
#4        C       2      no
#5        Z      10      no
#6        I       8      no
#7        A       9     yes
#8        H       1     yes
#9        X       7      no
#10       V       3      no
...