使用dplyr收集特定的虚拟变量

时间:2018-10-26 08:43:15

标签: r dplyr

这个问题是(Using dplyr to gather dummy variables)的扩展。

问题:如何收集仅几列而不是整个数据集?因此,在此示例中,我想收集所有列,但“轿车”除外。我的实际数据集有250列,因此,如果我可以按名称包含/排除列,那将会很棒。

数据集

head(type)
x    convertible coupe hatchback sedan wagon
1           0     0         0     1     0
2           0     1         0     0     0
3           1     0         0     0     0
4           1     0         0     0     0
5           1     0         0     0     0
6           1     0         0     0     0

输出

TypeOfCar
1     x
2     coupe 
3     convertible
4     convertible
5     convertible
6     convertible

3 个答案:

答案 0 :(得分:2)

不确定我是否了解您,但是您可以做您想做的事情:

df %>% select(-sedan) %>%  gather(Key, Value)

如果您需要太多变量,则可以使用:

select(-contains(""))
select(-start_wi(""))
select(-ends_with(""))

希望有帮助。

答案 1 :(得分:1)

您可以在-sedan中使用gather

dat %>% gather(TypeOfCar, Count, -sedan) %>% filter(Count >= 1) %>% select(TypeOfCar)
#      TypeOfCar
# 1 convertible
# 2 convertible
# 3 convertible
# 4 convertible
# 5       coupe

数据:

tt <- "convertible coupe hatchback sedan wagon
1           0     0         0     1     0
2           0     1         0     0     0
3           1     0         0     0     0
4           1     0         0     0     0
5           1     0         0     0     0
6           1     0         0     0     0"

dat <- read.table(text = tt, header = T)

答案 2 :(得分:0)

使用@RLave和@Carlos Vecina组合修复它

right_columns <- all_data %>% select(starts_with("hour"))

all_data$all_hour <-data.frame(new_column = names(right_columns )[as.matrix(right_columns )%*%seq_along(right_columns )],stringsAsFactors=FALSE)