В списке много столбцов. Я хотел бы использовать некоторые функции для автоматической работы.
У меня есть data.frame myData
myData$home_player_X нет. Я добавляю его по одному вручную.
Если я сделаю это вручную, код будет выглядеть так:
myData$home_player_1 <- lDataFrames[[3]]$home_player_1
myData$home_player_2 <- lDataFrames[[3]]$home_player_2
...
myData$home_player_11 <- lDataFrames[[3]]$home_player_11
Если мы рассмотрим только часть после <-, я могу преобразовать ее в выражение:
eval(parse(text=paste("lDataFrames[[3]]$home_player_",i,sep = "")))
Но я хочу преобразовать всю строку. Вся строка такая:
paste("myData$home_player_",i," <- lDataFrames[[3]]$home_player_", i,sep = "")
Я хочу преобразовать строку в оператор присваивания, чтобы я мог сделать это в цикле for





Вместо использования нотации $ просто используйте имя переменной в качестве индекса. Я заменю Y на ваш lDataFrames[[3]], но это должно быть легко перевести.
myData = data.frame(Var1 = 1:10)
Y = data.frame(home_player_1 = 11:20,
home_player_2 = 21:30, home_player_3 = 31:40)
for(i in 1:3) {
VarName = paste0("home_player_", i)
myData[ ,VarName] = Y[ ,VarName]
}
myData
Var1 home_player_1 home_player_2 home_player_3
1 1 11 21 31
2 2 12 22 32
3 3 13 23 33
4 4 14 24 34
5 5 15 25 35
6 6 16 26 36
7 7 17 27 37
8 8 18 28 38
9 9 19 29 39
10 10 20 30 40
Вместо того, чтобы играть со строками, вы можете напрямую скопировать нужные столбцы в mydata.
cols <- grep("^home_player", names(lDataFrames[[3]]), value = TRUE)
mydata[cols] <- lDataFrames[[3]][cols]
Используя воспроизводимый пример,
df <- data.frame(home_player_1 = 1:5, home_player_2 = 6:10, home_player_3 = 11:15)
cols <- grep("^home_player", names(df), value = TRUE)
mydata <- data.frame(matrix(nrow = nrow(df), ncol = length(cols),
dimnames = list(NULL, cols)))
mydata[cols] <- df[cols]
mydata
# home_player_1 home_player_2 home_player_3
#1 1 6 11
#2 2 7 12
#3 3 8 13
#4 4 9 14
#5 5 10 15
Другой ответ кажется мне проще. В любом случае, спасибо!