我在列表对象中组织了许多数据框,我想在其上同时执行不同的操作。我为 lapply
运行了不同的任务,但不知怎的,我无法弄清楚如何为每个data.frame创建一个新列并分配使用 {{计算的值1}} 到新列。我可以使用for循环,但不知何故,这会破坏使用 lapply
的目的。我确信这有一个非常简单的解决方案,但我无法理解这一点。
以下是我想对单个data.frame进行的操作:
名为lynx的数据框有一个名为DT的列,它是一个日期时间对象。我创建了一个新列,用于计算DT中两个连续值之间的时间差。最后我将最后一行指定为NA。
lapply
n_h <- length(lynx$DT)
lynx$dif_time[1:((n_h)-1)] <- difftime( lynx$DT[2:n_h],lynx$DT[1:(n_h-1)])
现在我有一个由15个data.frames组成的列表,我想要做同样的事情。以下是我为dif_time部分提出的内容,但它不起作用:
lynx$dif_time[n_h] <- NA
问题在于这一部分:lapply(lynx_list,"[[",1)<-
lapply(lynx_list,function(x,b) x$dif_time[1:(length(x[,b])-1)]<-difftime( x[,b][2:length(x[,b])],lynx[,b][1:(length(x[,b])-1)]),b)
,另一个lapply(lynx_list,"[[",1)<-
部分按预期工作。但是如何在列表的每个元素中调用指定的列?
答案 0 :(得分:0)
ml <- list(DF1=data.frame(A=sample(10), B=sample(10)),
DF2=data.frame(B=sample(10), D=sample(10)),
DF3=data.frame(H=sample(10), G=sample(10)) )
ml
ml$DF1[,"new"] <- ml$DF1[,1] - ml$DF1[,2]
ml$DF1
mlnew <- lapply(ml, function(x) cbind(x, newcolumn= x[,1] - x[,2] ))
mlnew