当我分组时,为什么我会失去这么多的观察?在R?

时间:2014-10-27 23:59:55

标签: r dataframe

> cat = data.frame(decsorgs, age, degree, race, class, marital, region,
+                  relig, sex, srcbelt, born, partyid, WTSSALL)
> dim(cat)
[1] 1129   13
> cat = subset(cat, decsorgs & age & degree & race & class & marital & region &
+                  relig & sex & srcbelt & born & partyid & WTSSALL)
> dim(cat)
[1] 13 13

正如你所看到的,我的子集之前有1129,之后只有13。这是为什么?我试图制作一个仅包含race=0行的子集。然而,即使我没有设定这种条件,仅仅分组的行为也会减少观察。请帮忙。我已经用了3个小时就可以了。感谢

2 个答案:

答案 0 :(得分:3)

在R中,0在使用FALSE进行投射时会转换为as.logical。你想要这样的东西:

cat <- cat[cat$race == 0, ]

答案 1 :(得分:3)

解释原始尝试的实际情况:在R中,数字被视为&#34; true&#34;如果他们非零,并且&#34;假&#34;当他们重新为0. decsorgs & age & degree告诉R找到所有3列不为零的行。一个简单的例子:

> eg_df = expand.grid(a=0:1, b=0:1, c=0:1)
> eg_df
  a b c
1 0 0 0
2 1 0 0
3 0 1 0
4 1 1 0
5 0 0 1
6 1 0 1
7 0 1 1
8 1 1 1
# Any rows with a 0 value are dropped
> subset(eg_df, a & b & c)
  a b c
8 1 1 1

我认为您的意图只是将这些列包含在您的子集中 是select参数的作用:

# Drop rows where a or b are 0, include columns b and c:
subset(eg_df, a & b, select=c("b", "c"))