如果我有以下df| ID|老虎|驴|龟|| --|--|--|--|| 1 | 1 | 0 | 0 || 2 | 0 | 1 | 0 || 3 | 0 | 0 | 1 |所以1等于True,0等于False。我想创建以下df| ID|动物|| --|--|| 1 |老虎|| 2 |驴|| 3 |龟|如何使用dplyr实现此功能?我首先想到我可以使用pivot_long(),但是在操作之后我不应该有更多的行。
df
dplyr
pivot_long()
myzjeezk1#
library(dplyr) library(tidyr) # pivot_longer pivot_longer(dat, -id, names_to = "animal") %>% filter(value > 0) # # A tibble: 3 x 3 # id animal value # <int> <chr> <int> # 1 1 tiger 1 # 2 2 donkey 1 # 3 3 turtle 1
subset( reshape2::melt(dat, id.vars = "id", variable.name = "animal"), value > 0)
iqih9akk2#
使用dr的可能性:
id = c(1,2,3) tiger = c( 1,0,0) donkey = c(0,1,0) turtle = c(0,0,1) original_df = data.frame(id,tiger,donkey,turtle) library(dplyr) original_df %>% mutate(animal = case_when(tiger==1~"tiger", donkey==1~"donkey", turtle==1~"turtle")) %>% select(id,animal)
2条答案
按热度按时间myzjeezk1#
dplyr
基础加整形2
iqih9akk2#
使用dr的可能性: