我正在尝试使用手动输入的关键字创建值组。例如,如果我有一个rollcall表,其值可以使用以下代码生成
df <- data.frame(name = c("Fred", "Victoria", "Jim", "Sally", "Ted", "Pamela", "end", "Victoria", "Fred", "Sally", "end", "Sally", "Pamela"),
sex = c("man", "woman", "man", "woman", "man", "woman", "neither", "woman", "man", "woman", "neither", "woman", "woman"))
是否有可能将这些值分组为几天,以便我有三天时间安排,以便人们可以问一个问题,“在哪一天,莎莉和一个男人在一起”?
答案 0 :(得分:1)
您可以使用cumsum
创建日期:
df$day <- cumsum(df$name == 'end')
df <- df[df$day != 'end', ]
unique(df$day[df$sex == 'man' & df$day %in% df$day[df$name == 'Sally']])
# [1] 0 1
所以,&#34;在前两天,莎莉和一个男人在一起#34;
编辑:我首先误解了这个问题。错误已得到修复。
答案 1 :(得分:1)
这可能需要两个部分并使用dplyr
包:
df.1 <- df %>%
mutate(day = cumsum(name == "end")) %>%
group_by(day) %>%
summarise(man = any(sex == "man"), woman = any(sex == "female"))
df <- df %>%
mutate(day = cumsum(name == "end")) %>%
left_join(df.1, by = "day")
现在,您可以在此处搜索,因为您有day
列,如果当天列中有man
,并且当天有woman
。要确定问题的答案,您只需使用
df$day[which(df$name == "Sally" & df$man == TRUE)]
导致
[1] 0 1
此方法创建一个表,供您沿这些组件搜索。