遍历数据框列表以创建新列

时间:2019-04-04 15:38:42

标签: r list lapply

我有一个数据帧DFList的列表。我想为DFList中的每个数据帧创建一个新列X4

Small Example

X1 <- c(1,2,3,"X","Y")
X2 <- c(100,200,130,120,150)
X3 <- c(1000,250,290,122,170)
DF1 <- data.frame(X1,X2,X3)

X1 <- c(5,6,4,3,9)
X2 <- c(105,205,150,125,175)
X3 <- c(1500,589,560,512,520)
DF2 <- data.frame(X1,X2,X3)

DFList <- list(DF1,DF2)
names(DFList) <- c("DF1","DF2")
DFList

要通过合并列X1,X2和X3中的值来创建新列,我创建了以下函数。

MyFUN <- function(V) {
  X4 <- paste(V[1],":",V[2],"-",V[3], sep = "")
  return(X4)
}

但是,我无法成功运行此功能...我尝试了以下操作,但没有将所需的X4列添加到列表中包含的数据框中。

print(DFList)

for (DF in DFList){
  for (num in (0:length(DFList))){
    DF["X4"] <- lapply(DF[num], FUN = MyFUN)
  }
}

print(DFList)

1 个答案:

答案 0 :(得分:3)

我们可以使用lapply遍历list元素,并使用transform创建paste ed组件(假设我们只有3列,并且列名是静态

lapply(DFList, transform, X4 = paste0(X1, X2, X3))

如果我们有可变列

lapply(DFList,  function(x) {x$newCol <- do.call(paste0, x); x})