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

在“目标”列中将是结果。提前谢谢你的帮助。

4

2 回答 2

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/ ,调用 to是必要的FALSE,因为ave它总是返回一个数字向量。没有as.logical,你会得到 0 和 1。

于 2013-03-28T08:49:08.763 回答
0

或者你可以做

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

然后你有行。如果您只想将 GOAL 作为输出:

data[data$value==valueFirst,][1,3]
于 2013-03-28T08:48:54.600 回答