如何在dplyr中根据不同的列创建一个新列

wz3gfoph  于 2023-09-27  发布在  其他
关注(0)|答案(2)|浏览(82)

如果我有以下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(),但是在操作之后我不应该有更多的行。

myzjeezk

myzjeezk1#

dplyr

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

基础加整形2

subset(
  reshape2::melt(dat, id.vars = "id", variable.name = "animal"),
  value > 0)
iqih9akk

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)

相关问题