将布尔指标列转换为单因子列

时间:2018-10-22 14:54:51

标签: r

几年前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分隔。

1 个答案:

答案 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的行上运行功能,这并不容易。