如何使用列表中的值使用R中的每个值动态创建数据框中的列?

时间:2016-12-08 16:35:37

标签: r list dataframe

我有一个数据框“宠物”,如下所示:

PERSON  | WEEK       | CAT | DOG | BIRD
------------------------------------------------
000001  | 2016-08-29 | CAT | 0   | 0
000002  | 2016-07-25 | 0   | DOG | BIRD

目前我的代码用适当的列替换“CAT”,“DOG”和“BIRD”的任何实例,并带有1:

pets$cat <- ifelse(pets$cat== "cat", 1, 0)
pets$dog <- ifelse(pets$dog== "dog", 1, 0)
pets$bird <- ifelse(pets$bird== "bird", 1, 0)

我想要做的是使用一个已经定义的列表,以便在一天内减少整个过程的手动,我添加了一个名为“LIZARD”的新列。我可以随时更新的列表:

animals <- c("cat","dog","bird")

R中是否有办法使用该列表基本上为动物中的每个项目运行“的循环,运行pet$item<- ifelse(pets$item== "item", 1, 0)

非常感谢帮助。无法找到任何类似的问题。

1 个答案:

答案 0 :(得分:0)

使用tidyr您可以收集数据,调整列然后再将其展开。这使用了前两列不是动物而不是动物载体的想法。

df %>% 
   gather(animal, value, -PERSON, -WEEK) %>% 
   mutate(value = ifelse(value == animal, 1, 0)) %>% 
   spread(animal, value)
相关问题