这个问题是(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
答案 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)