作者:123AJAgjt | 来源:互联网 | 2022-12-26 16:41
我有一个名为185个数据帧的列表WaFramesNumeric
.每个数据帧都有数百列和数千行.我想编辑每个数据框,以便它保留所有数字列以及我指定的任何非数字列.
使用:
for(i in seq_along(WaFramesNumeric)) {
WaFramesNumeric[[i]] <- WaFramesNumeric[[i]][,sapply(WaFramesNumeric[[i]],is.numeric)]
}
成功使每个数据框仅包含其数字列.
我试图用行修改它来添加特定的列.我试过了:
for (i in seq_along(WaFramesNumeric)) {
a <- WaFramesNumeric[[i]]$Device_Name
WaFramesNumeric[[i]] <- WaFramesNumeric[[i]][,sapply(WaFramesNumeric[[i]],is.numeric)]
cbind(WaFramesNumeric[[i]],a)
}
并尝试调用所有整数列的列号以及特定的列,然后基于:
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]
}
这些都返回错误,我很难过如何做到这一点.WaFramesNumeric
是另一个dataframes(WaFramesNumeric <- WaFramesAll
)列表的副本,所以我也尝试添加来自的特定列,WaFramesAll
但这不成功.
我感谢您提出的任何建议,如果有任何不清楚的地方我会道歉.
1> r2evans..:
你错误地认为for
循环中的最后一个命令是有意义的.它不是.事实上,它被丢弃了,所以既然你从未将它分配到任何地方(cbind
和索引WaFramesNumeric...
),它就会被默默地丢弃.
此外,您在第三个代码块中对data.frame进行了过度索引.首先,它i
在data.frame中使用,即使i
是data.frames 中的索引list
,也不是帧本身.第二个(可能由此引起),您试图索引2D帧的三维.只需将最后一个索引更改[,i,combine]
为[,combine]
或者[combine]
.
第三个问题(虽然可能还没有看到)是如果没有找到match
则会返回NA
.使用NA
返回错误索引帧(尝试mtcars[,NA]
查看).我建议您可以替换match
为grep
:它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]
}