Как преобразовать строку в оператор присваивания в R? - PullRequest
2 голосов
/ 29 апреля 2019

В списке много столбцов.Я хотел бы использовать некоторые функции для автоматической работы.

У меня есть 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

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

Вместо того, чтобы играть со строками, вы можете напрямую скопировать необходимые столбцы в 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
0 голосов
/ 29 апреля 2019

Вместо использования записи $ просто используйте имя переменной в качестве индекса.Я заменяю 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
...