我正在尝试为 R 上的数据表创建一个圆形列。它应该按标识符分组。
条件是这样的:
你能帮我解决这个问题吗?
谢谢!
我的问题是,当我创建列时,我总是必须为回合结束的观察输入错误的回合数。例如:观察 3 是 round = 2 而不是 round = 1
这是来自
这篇文章的最佳答案的
dplyr
解决方案,稍作更改(数据归功于@Leroy Tyrone):
library(dplyr)
df <- data.frame(identifier = rep(c("122-1-1",
"123-4-5",
"234-5-6"),
each = 4),
trial = rep(1:4, 3),
option = c("A", "A", "B", "A",
"A", "B", "B", "A",
"A", "A", "A", "A"),stringsAsFactors = F)
df%>%
mutate(round=with(rle(option), rep(ave(lengths, values, FUN = seq_along), lengths)),.by=identifier)
identifier trial option round
1 122-1-1 1 A 1
2 122-1-1 2 A 1
3 122-1-1 3 B 1
4 122-1-1 4 A 2
5 123-4-5 1 A 1
6 123-4-5 2 B 1
7 123-4-5 3 B 1
8 123-4-5 4 A 2
9 234-5-6 1 A 1
10 234-5-6 2 A 1
11 234-5-6 3 A 1
12 234-5-6 4 A 1
这将实现您在示例中概述的内容。我将变量“round”更改为“round_”,因为
round()
是 R 函数:
library(dplyr)
# Sample data
df <- data.frame(identifier = rep(c("122-1-1",
"123-4-5",
"234-5-6"),
each = 4),
trial = rep(1:4, 3),
option = c("A", "A", "B", "A",
"A", "B", "B", "A",
"A", "A", "A", "A"))
df %>%
group_by(identifier) %>%
mutate(round_ = ifelse("A" %in% option &
"B" %in% option &
trial == max(trial), 2, 1)) %>%
ungroup()
# A tibble: 12 × 4
identifier trial option round_
<chr> <int> <chr> <dbl>
1 122-1-1 1 A 1
2 122-1-1 2 A 1
3 122-1-1 3 B 1
4 122-1-1 4 A 2
5 123-4-5 1 A 1
6 123-4-5 2 B 1
7 123-4-5 3 B 1
8 123-4-5 4 A 2
9 234-5-6 1 A 1
10 234-5-6 2 A 1
11 234-5-6 3 A 1
12 234-5-6 4 A 1