我有一个名为WaFramesNumeric
的185个数据框列表。每个数据帧都有数百列和数千行。我想编辑每个数据框,以便它保留所有数字列以及我指定的任何非数字列。
使用:
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
是另一个数据框列表(WaFramesNumeric <- WaFramesAll
)的副本,因此我也尝试添加WaFramesAll
中的特定列,但这不成功。
我感谢您提出的任何建议,如果有任何不明之处我会道歉。
答案 0 :(得分:5)
您错误地认为for
循环中的最后一个命令是有意义的。它不是。实际上,它被丢弃了,所以既然你从未在任何地方分配它(cbind
和WaFramesNumeric...
的索引),它就会被默默地丢弃。
此外,您在第三个代码块中对data.frame进行了过度索引。首先,它在data.frame中使用i
,即使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]
}
答案 1 :(得分:2)
我不确定你是什么意思&#34;尝试调用所有整数列的列号...&#34;,但是如果你想要查看数据帧列表并根据某些功能选择一些列,并保持给出一个列名,你可以这样做:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (getActivity()!=null)
{
refund.setChecked(false);
}
}