如何对列表中所有数据框的列进行复杂编辑?

Koo*_*nee 1 integer r list multiple-columns dataframe

我有一个名为185个数据帧的列表WaFramesNumeric.每个数据帧都有数百列和数千行.我想编辑每个数据框,以便它保留所有数字列以及我指定的任何非数字列.

使用:

for(i in seq_along(WaFramesNumeric)) {
    WaFramesNumeric[[i]] <- WaFramesNumeric[[i]][,sapply(WaFramesNumeric[[i]],is.numeric)] 
}
Run Code Online (Sandbox Code Playgroud)

成功使每个数据框仅包含其数字列.

我试图用行修改它来添加特定的列.我试过了:

for (i in seq_along(WaFramesNumeric)) {
    a <- WaFramesNumeric[[i]]$Device_Name
    WaFramesNumeric[[i]] <- WaFramesNumeric[[i]][,sapply(WaFramesNumeric[[i]],is.numeric)] 
    cbind(WaFramesNumeric[[i]],a)
}
Run Code Online (Sandbox Code Playgroud)

并尝试调用所有整数列的列号以及特定的列,然后基于:

for (i in seq_along(WaFramesNumeric)) {
    f <- which(sapply(WaFramesNumeric[[i]],is.numeric))
    m <- match("Cost_Center",colnames(WaFramesNumeric[[i]]))
    n <- match("Device_Name",colnames(WaFramesNumeric[[i]]))
    combine <- c(f,m,n)
    WaFramesNumeric[[i]][,i,combine]
}
Run Code Online (Sandbox Code Playgroud)

这些都返回错误,我很难过如何做到这一点.WaFramesNumeric是另一个dataframes(WaFramesNumeric <- WaFramesAll)列表的副本,所以我也尝试添加来自的特定列,WaFramesAll但这不成功.

我感谢您提出的任何建议,如果有任何不清楚的地方我会道歉.

r2e*_*ans 5

你错误地认为for循环中的最后一个命令是有意义的.它不是.事实上,它被丢弃了,所以既然你从未将它分配到任何地方(cbind和索引WaFramesNumeric...),它就会被默默地丢弃.

此外,您在第三个代码块中对data.frame进行了过度索引.首先,它i在data.frame中使用,即使i是data.frames 中的索引list,也不是帧本身.第二个(可能由此引起),您试图索引2D帧的三维.只需将最后一个索引更改[,i,combine][,combine]或者[combine].

第三个问题(虽然可能还没有看到)是如果没有找到match则会返回NA.使用NA返回错误索引帧(尝试mtcars[,NA]查看).我建议您可以替换matchgrep:它integer(0)在找不到任何内容时返回,这就是您在这种情况下所需的内容.

for (i in seq_along(WaFramesNumeric)) {
  f <- which(sapply(WaFramesNumeric[[i]], is.numeric))
  m <- grep("Cost_Center", colnames(WaFramesNumeric[[i]]))
  n <- grep("Device_Name", colnames(WaFramesNumeric[[i]]))
  combine <- c(f,m,n)
  WaFramesNumeric[[i]] <- WaFramesNumeric[[i]][combine]
}
Run Code Online (Sandbox Code Playgroud)