替换数据框中的单元格值

时间:2019-02-19 10:35:52

标签: r function for-loop dplyr

我正在一个函子中运行一个for循环,该函子循环一组变量,从某些数据帧中获取与该变量关联的系数。然后在主数据框中,根据行的ID和列的变量名进行过滤以找到正确的行和列,并将系数添加到该单元格的值中。

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:替换长度为零   来自:[<-.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。即使在此行中,我也无法创建可复制的示例,因为我的数据太大而无法在此处显示。寻求有关如何发生错误或是否有更好方法的提示。

0 个答案:

没有答案