我有一个数据集,其中一个列仅为"#“符号。我使用以下代码删除该列。
ia <- as.data.frame(sapply(ia,gsub,pattern="#",replacement=""))
但是,在此操作之后,I整数列之一已更改为因子。
我想知道发生了什么,我怎样才能避免这种情况。非常感谢。
发布于 2014-04-08 14:37:44
更正确的代码版本可能如下所示:
d <- data.frame(x = as.character(1:5),y = c("a","b","#","c","d"))
> d[] <- lapply(d,gsub,pattern = "#",replace = "")
> d
x y
1 1 a
2 2 b
3 3
4 4 c
5 5 d
但是,正如您将注意到的,这种方法永远不会实际删除违规的列。它只是将#
值替换为空字符串。要删除所有#
的列,可以执行如下操作:
d <- data.frame(x = as.character(1:5),
y = c("a","b","#","c","d"),
z = rep("#",5))
> d[,!sapply(d,function(x) all(x == "#"))]
x y
1 1 a
2 2 b
3 3 #
4 4 c
5 5 d
发布于 2014-04-08 14:49:13
当然,如果您想要从数据帧中删除一个违规的列,并且您知道它是哪一列,那么您可以只进行子集。所以,如果这是第一列:
df <- df[,-1]
如果是后面的列,则增加。
https://stackoverflow.com/questions/22949407
复制相似问题