假设我在R中有以下数据框:
set.seed(5)
PosActions <- c("Work","Pause","Clockin","Clockout","Lunch")
df <- data.frame(ID = c(rep(1,3),rep(2:3,each=4),rep(4,5)),
ACTION = sample(PosActions,16,replace=T))
返回
ID ACTION
1 1 Pause
2 1 Clockout
3 1 Lunch
4 2 Pause
5 2 Work
6 2 Clockout
7 2 Clockin
8 3 Lunch
9 3 Lunch
10 3 Work
11 3 Pause
12 4 Clockin
13 4 Pause
14 4 Clockin
15 4 Pause
16 4 Pause
在此数据框中,对应于ID == 2和ID == 3(第4行至第11行)的行包含字符串&#34;工作&#34;在ACTION栏中。我试图找到这些行的索引。在这种情况下:
[1] FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE
[14] FALSE FALSE FALSE
换句话说,每当具有相同ID号的一组行包含&#34;工作&#34;在ACTION列中,必须返回此ID号的所有行索引。
我希望有人可以提前帮助我。
答案 0 :(得分:4)
你的问题并不完全清楚。听起来你正在寻找以下内容:
> df$ID %in% df$ID[which(df$ACTION == "Work")]
[1] FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[11] TRUE FALSE FALSE FALSE FALSE FALSE
一步一步:
## Which rows have "Work" in the "ACTION" column?
> which(df$ACTION == "Work")
[1] 5 10
## What's the corresponding "ID" value, so we can subset on that?
> df$ID[which(df$ACTION == "Work")]
[1] 2 3