Замена значения ячейки в кадре данных - PullRequest
0 голосов
/ 19 февраля 2019

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

for (k in 1:length(var.names)){
  var<-var.names[k] ## selects variable
  value.add<-coeff.proj.filter[coeff.proj.filter$Variable==var,2] # filter my 
                                                       # coefficent dataframe
  df2[df2$ID==id,var]<- # find the cell to replace
          df2[df2$ID==id,var]+value.add # take cell value
                                                            # and add value
)}

Когда я вручную выполняю шагифункция, все работает отлично.Я сделал целую кучу ручных проверок.Но я не могу не понять, откуда возникла проблема.

Ошибка, которую я получаю при запуске funciotn:

Ошибка в x [[jj]] [iseq]<- vjj: замена имеет нулевую длину. Вызывается из: <code>[<-.data.frame (*tmp*, proj.data2 $ Player_ID == id, var, value = numeric (0))

Это заставляет меня задуматьсячто-то не так с вектором 'var' или с вопросом, сколько раз выполняется цикл for?

моя функция:

## Reproducable Code
## Variable<-c('var1','var2','var3')
## var.list<-Variable
## values<-c(10,20,30)
## coeff.proj<-data.frame(Variable,values)
## ID<-c('A','B','C','D')
## var1<-c(1,2,3,4)
## var2<-c(11,12,13,14)
## var3<-c(21,22,23,24)
## df<-data.frame(ID,var1,var2,var3)
## id<-'A'
func1<- 
  function(df,var.list,id,coeff.proj){
  df2<-df

coeff.proj.filter<-coeff.proj[coeff.proj$Variable %in% var.list,]
var.names<-coeff.proj.filter$Variable
## let var.names<-c('var1','var2','var3') for dummy coding
## var.names is character vector of length 12
## For Loop copied from above
for (k in 1:length(var.names)){
  var<-var.names[k] ## selects variable
  value.add<-coeff.proj.filter[coeff.proj.filter$Variable==var,2] # filter my 
                                                       # coefficent dataframe
  df2[df2$ID==id,var]<- # find the cell to replace
          df2[df2$ID==id,var]+value.add # take cell value
                                                            # and add value
)}

## return(df2)
}

Единственная разница должна быть для ID=='A', строка 1 теперь показывает 11,31 и 51. Даже внутри этого я не могу создать воспроизводимый пример, потому что мойданные слишком велики, чтобы показать здесь.Первоначально ищите советы о том, как могла произойти ошибка или есть ли лучший способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...