首次根据数字状况选择行

时间:2013-03-28 08:20:38

标签: r select row conditional-statements

我想找到第一次出现定义数字的行(例如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 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

或者你可以做到

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

然后你有了这一行。如果您只想要GOAL作为输出:

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