麻烦子集r数据框

时间:2016-04-25 20:12:50

标签: r dataframe subset

我有一个数据框,其中的列是人(pid)和位置列。我正在尝试对数据进行子集化,以便当人员ID出现超过67次时,我会根据人员实例所在的位置获取数据的子集,然后对该子集运行一系列回归。

我知道如何让所有人达到67阈值(使用table()来获取每个pid的数量),但是如何根据他们的位置获取数据框的子集而不知道位置是什么?数据框大约有100,000行,有400人达到67分,因此手工操作看起来并不实用。

我不知道如何在这里放置我的数据的样本数据集,但它看起来像这样。因此,例如,如果pid值1重复200次,我想将所有具有位置值'6'的数据帧子集,而不管pid如何。类似于pid 3 - 我想要所有位置为'1'的行。唯一的问题是有时一个pid会有多个位置。大多数将位于一个特定的位置 - 所以对于pid 3,有位置1和位置2.在这种情况下,我想要对具有多数位置的位置进行子集化。

 pid     location
 1       6
 1       6
 1       6
 2       4
 2       6
 3       1
 3       2
 3       1

样本数据

set.seed(1)
pid <- sample(1:10, 1000, replace=T)
location <- sample(1:10, replace=T)
df <- data.frame(pid, location)

编辑: 好的 - 我要做的是让每个Pid重复超过66次。一旦我有了该列表,我想知道它们发生在哪个位置。然后,我想在整个数据帧的位置子集上运行一堆回归。所以 - 如果Pid 1发生500次,并且它们发生在位置6,我想为位置6的数据帧进行子集化,为Pid 1创建一个虚拟变量,并在该位置6的子集上运行一系列回归(不包括其他回归变量)在这个样本中)。数据帧中有1272个唯一的Pid。我能够使用Ano的答案得到我想要的东西,但最后我做的有点不同。根据位置首先对数据进行子集化,然后获得重复超过66次的Pid并运行我的回归似乎更容易(至少在概念上对我来说)。这消除了对Pid有多个位置的担忧。但对于r来说,我很陌生,我会对其他更好的编码方式提出建议。 希望这能澄清一点。

2 个答案:

答案 0 :(得分:1)

此解决方案使用dplyr

library(dplyr)

按PID对数据进行分组,计算该PID的实例数,过滤掉那些达到您感兴趣的阈值的实例,然后选择选择不同的PID

foo <- df %>%
  group_by(pid) %>%
  filter(n() >= 67 & max(n() == n())) %>%
  distinct(pid) %>%
  .$pid

使用新生成的矢量对原始数据帧进行子集化,并选择唯一的location s

unique(df[df$pid %in% foo,"location"])

答案 1 :(得分:0)

这是一种不使用"android:support:fragments"的可能性:

dplyr