我有一个数据框架,其中的列是person (pid)和location列。我正在尝试对数据进行子集,以便当人员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)编辑:好的--我要做的是得到每一个重复超过66次的Pid。一旦我有了这个列表,我想看看它们发生在什么地方。然后,我想在整个数据挖掘的一个位置子集上运行一系列的回归。因此-如果Pid 1发生了500次,并且它们发生在位置6中,我想对位置6的数据进行子集,为Pid 1创建一个虚拟变量,并在位置6的子集上运行一系列回归(此示例中没有包括其他回归变量)。数据文件中有1272个唯一的Pid。我能够用阿诺的答案来得到我想要的东西,但最终我做的有点不同。首先按位置对数据进行子集,然后获得重复次数超过66次的Pid,然后运行回归,这似乎更容易(至少对我来说是这样)。这就消除了对Pid有多个位置的担忧。但是对于r来说,我是非常新的,我愿意接受其他的建议,什么是更好的编码方法。希望这能澄清一点。
发布于 2016-04-25 20:29:26
此解决方案使用dplyr。
library(dplyr)按PID对数据进行分组,计算该PID的实例数,筛选出那些达到您感兴趣的阈值的实例,然后选择不同的PID。
foo <- df %>%
group_by(pid) %>%
filter(n() >= 67 & max(n() == n())) %>%
distinct(pid) %>%
.$pid使用新生成的向量对原始数据进行子集,并选择唯一的location
unique(df[df$pid %in% foo,"location"])发布于 2016-04-25 20:58:28
这里有一种不使用dplyr的可能性
df.freq <- addmargins(table(df), margin = 2)
df.freq <- subset(df.freq, 'Sum' > 67, select = -Sum)
df.max <- apply(df.freq, 1, function(x) {
names(x)[which(x == max(x))] })
df.max <- unique(as.numeric(df.max))
subset(df, location %in% df.max)https://stackoverflow.com/questions/36850170
复制相似问题