我正在尝试使用for loop
从嵌套的数据框列表中获取六个元素,然后将这些元素放在一起,列表长度为六。然后rbind
列入具有六列的数据框。
我发现每次元素为NULL时,它会在进入列表之前自动删除。
以下是代码的截断版本。对不起,数据本身有太多级别的列表,我不知道如何粘贴好的部分。
ob_dat<-data.frame(a=character(0), b=character(0), c=character(0), d=character(0),e=character(0), f=character(0), stringsAsFactors=FALSE)
e<-e_previous
f<-f_previous
for (k in 1:nrow(dat)){
a<-dat$id[[k]]
b<-dat$subject[[k]]
c<-dat$updated[[k]]
d<-dat$type[[k]]
ob_list<-as.list(c(a,b,c,d,e,f))
ob_list<-lapply(ob_list, function(x) ifelse(x == "NULL", NA, x))
ob_dat<rbind(ob_dat,setNames(ob_list,names(ob_dat)))
ob_dat[,1:6]<-apply(ob_dat[,1:6],2,as.character)
}
对于所有没有NULL的记录,代码运行良好,直到一些元素,比如c和d为NULL。它给了我如下错误:
Error in setNames(ob_list, names(ob_dat)) :
'names'属性[6]的长度必须与vector [4]
的长度相同显然,在将其他元素加入列表ob_list之前,删除了c和d的NULL元素。我尝试使用类似的东西:
c<-ifelse(c=="NULL",NA,c). I was hoping that using `ifelse` can change all `NULL` to `NA`. However, c was changed into `logical(0)` when c was NULL.
请帮忙。谢谢。