2013-03-28 36 views
2

我想查找第一次出现定义号码(例如2)的行吗?第一次根据号码条件选择行

例如:

group <- c("a", "a", "a", "a", "a", "b", "b", "b", "b", "b") 
value <- c(1, 1, 2, 2, 1, 1, 2, 1, 2, 3) 
GOAL <- c("FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "FALSE", "TRUE", "FALSE", "FALSE", "FALSE") 
data <- data.frame(group, value, GOAL) 
data 

在列 “GOAL” 将是的结果。 非常感谢您的帮助。

回答

2

这样假定每个group至少有一个2。虽然你的样本数据按组排列,这里使用的方法不取决于此。

# given vector v, return vector of FALSEs, except at the first 2 
f <- function(v) replace(logical(length(v)), which(v == 2)[1], TRUE) 
transform(data, GOAL=as.logical(ave(value, group, FUN=f))) 
# group value GOAL 
# 1  a  1 FALSE 
# 2  a  1 FALSE 
# 3  a  2 TRUE 
# 4  a  2 FALSE 
# 5  a  1 FALSE 
# 6  b  1 FALSE 
# 7  b  2 TRUE 
# 8  b  1 FALSE 
# 9  b  2 FALSE 
# 10  b  3 FALSE 

的调用as.logical是必要的,如果你想TRUE/FALSE,因为ave总是返回一个数值向量。没有as.logical,你会得到0和1。

+0

所有的解决方案都很棒。谢谢。 – Eco06 2013-03-28 08:57:39

0

或者你可以做

valueFirst <- 2 
data[data$value==valueFirst,][1,] 

然后你有行。如果你想唯一的目标作为输出:

data[data$value==valueFirst,][1,3] 
+0

我想OP想要一个向量,它给出每个“组”中的第一个出现。 – juba 2013-03-28 08:51:37