R $运算符对原子向量无效

时间:2014-04-08 22:26:54

标签: r

我有一个数据集,其中一列只有“#”符号。我使用以下代码删除了此列。

ia <- as.data.frame(sapply(ia,gsub,pattern="#",replacement=""))

但是,在此操作之后,我将整数列中的一个更改为factor。

我想知道发生了什么,我怎么能避免这种情况。欣赏它。

2 个答案:

答案 0 :(得分:2)

更正确的代码版本可能是这样的:

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

答案 1 :(得分:0)

当然,如果您想要从数据框中删除违规列,并且您知道它是哪一列,则可以只进行子集化。所以,如果它是第一列:

df <- df[,-1]

如果是后一列,请递增。