R

时间:2015-09-23 06:51:48

标签: r

drop(df)df[which1, which2, drop=T]如何运作?我找不到任何例子......

我尝试了什么:

> df = data.frame(a = rep(3,3), b = rep(3,3))
> df$a = as.factor(df$a)
> df$b = as.factor(df$b)
> 
> drop(df)
  a b
1 1 3
2 2 3
3 3 3
> 
> df[,]
  a b
1 1 3
2 2 3
3 3 3

没有丢弃任何东西(第3行和第b列都有一个级别)。任何帮助都表示赞赏。感谢。

更新:谢谢@Paul Hiemstra

我意识到它不会丢弃重复数据,但会丢弃多余的维度

> df[1, ]
  a b
1 1 3
> dim( df[1, ] )
[1] 1 2
> 
> df[ ,1]
[1] 1 2 3
Levels: 1 2 3
> dim( df[ ,1] )
NULL

在上面的例子中,似乎R不能使df[1, ]成为一个向量,因为列a和b进行区分。 R可以使df[ ,1]为向量(dim = NULL)

1 个答案:

答案 0 :(得分:5)

来自drop的文档:

  

删除只有一个级别的数组的维度。

因此,给出以下矩阵只有一列:

m = matrix(1:10, 10, 1)

Drop将此缩小为:

drop(m)
 [1]  1  2  3  4  5  6  7  8  9 10

这是一个载体。

一般来说,drop如果长度为1,则会丢弃数组或矩阵的维度,实际上是多余的。

df[, drop = TRUE]中使用它时我引用了?'['的文档:

  


  对于矩阵和数组。如果为TRUE,则将结果强制转换为可能的最低维度(请参阅示例)。这仅适用于提取元素,而不适用于替换元素。有关详细信息,请参阅drop。

对于data.frame,drop具有类似的效果:一列的data.frame缩减为矢量。