【发布时间】:2019-11-24 03:11:18
【问题描述】:
我需要找到我的 df 满足由两个变量分组的特定条件的前两次。我正在尝试使用 ddply 函数,但“.variables”命令出现问题。
所以在这个例子中,我试图在每个组/试验中找到前两次 x > 30 和 y > 30。
我使用 ddply 的方式是在数据集中给我前两次,然后对每个组重复。
set.seed(1)
df <- data.frame((matrix(nrow=200,ncol=5)))
colnames(df) <- c("group","trial","x","y","hour")
df$group <- rep(c("A","B","C","D"),each=50)
df$trial <- rep(c(rep(1,times=25),rep(2,times=25)),times=4)
df[,3:4] <- runif(400,0,50)
df$hour <- rep(1:25,time=8)
library(plyr)
ddply(.data=df, .variables=c("group","trial"), .fun=function(x) {
i <- which(df$x > 30 & df$y >30 )[1:2]
if (!is.na(i)) x[i, ]
})
预期结果:
group trial x y hour
13 A 1 34.3511423 38.161134 13
15 A 1 38.4920710 40.931734 15
36 A 2 33.4233369 34.481392 11
37 A 2 39.7119930 34.470671 12
52 B 1 43.0604738 46.645491 2
65 B 1 32.5435234 35.123126 15
但相反,我的代码是从第一组试验中找到 c(1,4)并为每个试验组重复一遍:
group trial x y hour
1 A 1 34.351142 38.161134 13
2 A 1 38.492071 40.931734 15
3 A 2 5.397181 27.745031 13
4 A 2 20.563721 22.636003 15
5 B 1 22.953286 13.898301 13
6 B 1 32.543523 35.123126 15
如果组*试验中没有第二次出现,我还希望有 NA 行。
谢谢,
【问题讨论】:
-
您的预期输出似乎与您的输入数据不匹配。请仔细检查。
-
抱歉,设置为不同的种子。感谢您指出。现已更正。