使用R中的lapply为多个数据框创建和填充列

时间:2014-09-16 08:28:52

标签: r dataframe lapply

我在列表对象中组织了许多数据框,我想在其上同时执行不同的操作。我为 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)<-部分按预期工作。但是如何在列表的每个元素中调用指定的列?

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