子集化数据框架方法的差异

时间:2014-01-09 19:06:23

标签: r dataframe

tmp1 <- data.frame(x = 10, y = NA, z = NA)

实际值:

> tmp1[ ,!is.na(tmp1)]
[1] 10

所需:

> tmp1[ ,!is.na(tmp1)]
   x
1 10

Pfft,为什么?

> tmp1[-c(2:3)]
   x
1 10

grumblegrumblegrumble

> tmp1[ ,-c(2:3)]
[1] 10

我确信R正在按照我的要求行事,但它并没有完全符合我的要求:)

1 个答案:

答案 0 :(得分:3)

当您只询问data.frame的一列时,R会为您提供一个原子向量,除非您指定要将结果保存为data.frame:

tmp1[,-(2:3),drop=F]

另外值得注意的是:

  • 2:3已经是一个向量,因此您不需要c(2:3),但您需要-(2:3)来分发负号。
  • tmp1[-c(2:3)]有点令人困惑,因为data.frames也是列表。这意味着删除列表tmp1的第二项和第三项,即列。我会避免这种表示法,但这取决于你。