Я пытаюсь использовать функцию% in% для добавления определенных столбцов к фреймам данных, вложенным в список списков. Ниже приведен игрушечный пример моих данных.
dput (руководитель (список)):
list(FEB_games = list(GAME1 = structure(list(GAME1_Class = c("paladin",
"fighter", "wizard", "sorcerer", "rouge"), GAME1_Race = c("human",
"elf", "orc", "human", "gnome"), GAME1_Alignment = c("NE", "CG",
"CE", "NN", "LG"), GAME1_Level = c(6, 7, 6, 7, 7), GAME1_Alive = c("y",
"y", "y", "y", "y")), row.names = c("m.Stan", "m.Kenny", "m.Cartman",
"m.Kyle", "m.Butters"), class = "data.frame"), GAME2 = structure(list(
GAME2_Class = c("wizard", "cleric", "monk", "bard"), GAME2_Race = c("half-elf",
"elf", "human", "dwarf"), GAME2_Alignment = c("CG", "CE",
"NN", "LG"), GAME2_Level = c(5, 5, 5, 5), GAME2_Alive = c("y",
"y", "y", "y")), row.names = c("m.Kenny", "m.Cartman", "m.Kyle",
"m.Butters"), class = "data.frame")), MAR_games = list(GAME3 = structure(list(
GAME3_Class = c("cleric", "barbarian", "warlock", "monk"),
GAME3_Race = c("elf", "half-elf", "elf", "dwarf"), GAME3_Alignment = c("LG",
"LG", "CE", "LG"), GAME3_Level = c(1, 1, 1, 1), GAME3_Alive = c("y",
"y", "y", "y")), row.names = c("l.Stan", "l.Kenny", "l.Cartman",
"l.Butters"), class = "data.frame"), GAME4 = structure(list(GAME4_Class = c("fighter",
"wizard", "sorcerer", "rouge"), GAME4_Race = c("half-elf", "elf",
"human", "dwarf"), GAME4_Alignment = c("CG", "CE", "LN", "LG"
), GAME4_Level = c(5, 5, 5, 5), GAME4_Alive = c("y", "y", "y",
"y")), row.names = c("l.Kenny", "l.Cartman", "l.Kyle", "l.Butters"), class = "data.frame")))
У меня есть два разных набора столбцов (фреймов данных) для добавления. Feb_detentions to Feb_games и Mar_detentions to Mar_games.
dput (головка (Feb_detentions)):
structure(list(Pupil = c("m.Stan", "m.Stan", "m.Kenny", "m.Cartman",
"m.Kyle", "Butters"), Detention = c("y", "y", "y", "n", "n", "y"
)), row.names = c(NA, 6L), class = "data.frame")
dput (головка (Mar_detentions)):
structure(list(Pupil = c("l.Stan", "l.Kenny", "l.Cartman", "l.Kyle"),
Detention = c("n", "y", "y", "n")), row.names = c(NA, 4L), class = "data.frame")
Мне удалось использовать эти шаги для добавления интересующих столбцов к фрейму данных (не вложенному в список). Дубликаты должны были быть удалены функцией, я не смог сделать это внутри функции.
Feb_detentions [! продублировано (Feb_detentions $ Pupil),] -> Feb_detentions_dup
addDetentions <- function(df, df_namecol, detentions, detention_namecol){
df[which(df_namecol %in% detention_namecol == T),] -> df_v1
detentions[which(detention_namecol %in% df_namecol == T),] -> det_v1
cbind(df_v1, det_v1) -> df_edit
return(df_edit)
}
addDetentions(df = GAME1, df_namecol = rownames(GAME1),
detentions = Feb_detentions_dup, detention_namecol = Feb_detentions_dup$Pupil) -> output
* * Dput тысячи двадцать-одина (головка (выход)): * * тысяча двадцать-дв
structure(list(GAME1_Class = c("paladin", "fighter", "wizard",
"sorcerer", "rouge"), GAME1_Race = c("human", "elf", "orc", "human",
"gnome"), GAME1_Alignment = c("NE", "CG", "CE", "NN", "LG"),
GAME1_Level = c(6, 7, 6, 7, 7), GAME1_Alive = c("y", "y",
"y", "y", "y"), Pupil = c("m.Stan", "m.Kenny", "m.Cartman", "m.Kyle",
"m.Butters"), Detention = c("y", "y", "n", "n", "y")), row.names = c("m.Stan", "m.Kenny", "m.Cartman", "m.Kyle", "m.Butters"), class = "data.frame")
Я хотел бы выполнить эту функцию (или что-то еще, что работает) для всего списка. Но так как есть два разных набора столбцов для добавления в два разных вложенных списка в одном списке, я немного застрял.
lapply(Chars_alive, function(x) {addDetentions(x, rownames(x), Feb_detentions, Feb_detentions$Pupil)})
Любая помощь будет оценена здесь.