几年前here提出了类似的问题。
我的设置有些不同。我的指标变量不是“ true”虚拟变量,因为它们重叠。
我想执行以下操作:
lower, upper = get_age_range(selected option)
queryset.filter(max_price>lower).filter(max_price<higher)
由reprex package(v0.2.0)于2018-10-22创建。
请注意,列名已作为字符值粘贴在# fake data
library(tibble)
dat <- tribble(
~"a", ~"b", ~"c",
0, 0, 0,
1, 0, 0,
1, 1, 1
)
dat
#> # A tibble: 3 x 3
#> a b c
#> <dbl> <dbl> <dbl>
#> 1 0 0 0
#> 2 1 0 0
#> 3 1 1 1
# desired data
desired_col <- c("none", "a", "a,b,c")
cbind(dat, desired_col)
#> a b c desired_col
#> 1 0 0 0 none
#> 2 1 0 0 a
#> 3 1 1 1 a,b,c
中。如果没有值,则该值== desired_col
。如果存在多个值,则这些值用none
分隔。
答案 0 :(得分:2)
这是使用dydyverse函数的一种方式
library(tibble)
library(dplyr)
library(tidyr)
dat %>%
rowid_to_column() %>% # keep data for each row together
gather("col", "val", -rowid) %>%
mutate(rowid=factor(rowid)) %>%
filter(val==1) %>%
group_by(rowid) %>%
summarize(desired=paste(col, collapse=",")) %>% #collapse values
complete(rowid, fill = list(desired="none")) # add "none" for empty groups
# rowid desired
# <fct> <chr>
# 1 1 none
# 2 2 a
# 3 3 a,b,c
基本思想涉及重塑数据,以便我们可以运行组功能,而不是在data.frame的行上运行功能,这并不容易。