以下是一个简单的数据框。
Program <- c("A","B","C","D","E")
Apartment <- c("x","","","x","")
House <- c("x","","x","","")
Condo <- c("","x","","","x")
Cat <- c("x","","x","","")
Dog <- c("","x","","","")
Fish <- c("","x","","x","x")
DF1 <- data.frame(Program,Apartment,House,Condo,Cat,Dog,Fish)
使用此数据框,我想使用Tidyr创建下表。该表按住宿列出了每只宠物的数量。因此,对于那些拥有公寓的人来说,有一个实例是猫,而一个实例是鱼。
为了做到这一点,我首先必须在熔化数据之前用每列的宠物名替换“ x”。我想知道如何在一行代码或一个函数中跨所有列执行此操作。
使用Tidyr或Reshape2以下面的确切形式创建表时,我也遇到了麻烦。(下表并不完全对齐,但每个数字都应在宠物名下面。因此,对于第一行,1应该在猫的下面,0应该在狗的下面,而1在鱼的下面,等等。)
variable Cat Dog Fish
1 Apartment 1 0 1
2 House 2 0 0
3 Condo 0 1 2
我们可以尝试 dplyr/tidyr
library(dplyr)
library(tidyr)
DF1 %>%
gather(House, Val, Apartment:Condo) %>%
filter(Val!="") %>%
gather(Animals, Val2, Cat:Fish) %>%
group_by(House, Animals) %>%
summarise_each(funs(sum(.!='')), Val:Val2) %>%
spread(Animals, Val2) %>%
select(-Val)
# House Cat Dog Fish
# <chr> <int> <int> <int>
#1 Apartment 1 0 1
#2 Condo 0 1 2
#3 House 2 0 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句