说我们有:
dat <- data.frame( x1 = c(rep(c("A","B"), each = 4),"B"),
x2 = rep(c("a","a","b","b", "a","a","a","a","a")),
x3 = c("cow","pig","cow","cow",
"cow","pig","pig","pig",
"cow"
)
)
我想保留每个x1:x2组合之前的所有行&#34; pig&#34;在&#34; pig&#34;之后发生并删除所有行。发生。
如果只有&#34;牛&#34;如果只有&#34;猪&#34;那么我会保留所有&#34;奶牛&#34;然后删除所有行。
这个例子将给出:
x1 x2 x3
1 A a cow
3 A b cow
4 A b cow
5 B a cow
我可以写ddply例如这个很好,但我知道必须有一个函数来快速获取行&#34; pig&#34;我无法找到并保存循环。
答案 0 :(得分:1)
使用子集更容易:
dat[!(dat$x3=='pig'),]
x1 x2 x3
1 A a cow
3 A b cow
4 A b cow
编辑:要删除第一个'猪'之后的所有行,请执行以下操作:
badrow<-which(dat$x3=='pig')[1]
dat[1:(badrow-1),]
添加一些代码来处理which
根本不返回任何内容的情况。