如何解决使用多个唯一标识符传播我的数据框
我正在尝试创建一个数据帧来传播我的数据帧:
my_data1 <- data.frame(Tank = c("1A","1D","1F","1A","2A"),Bag = c("C1","C2","C1","T1"),name = c("ally","ally","nancy","ted","mark","ted"),deformity=c("spinal","eye","snout","spinal","head","eye"))
为此:
my_data2 <- data.frame(Tank = c("1A",ally_deformity = c("spinal",NA,NA),nancy_deformity=c(NA,ted_deformity=c("spinal","eye"),mark_deformity=c(NA,NA))
所以我希望“Tank”和“Bag”列是我的唯一标识符,而其他每一列都是每个人为该特定坦克和包找到的畸形。我一直在尝试 tidyr 的传播,但没有运气。
解决方法
我们可以使用pivot_wider
library(dplyr)
library(tidyr)
library(stringr)
my_data1 %>%
mutate(name = str_c(name,'_deformity')) %>%
pivot_wider(names_from = name,values_from = deformity)
-输出
# A tibble: 4 x 6
# Tank Bag ally_deformity nancy_deformity ted_deformity mark_deformity
# <chr> <chr> <chr> <chr> <chr> <chr>
#1 1A C1 spinal NA spinal NA
#2 1D C2 eye NA NA NA
#3 1F C2 NA snout NA head
#4 2A T1 NA NA eye NA
,
使用基础 R,您可以:
reshape(my_data1,v.names = "deformity",timevar = "name",dir="wide",idvar = "Tank",sep="_")
Tank Bag deformity_ally deformity_nancy deformity_ted deformity_mark
1 1A C1 spinal <NA> spinal <NA>
2 1D C2 eye <NA> <NA> <NA>
3 1F C2 <NA> snout <NA> head
6 2A T1 <NA> <NA> eye <NA>
,
使用 data.table
的 dcast
选项
dcast(setDT(my_data1),Tank + Bag ~ paste0(name,"_deformity"))
给予
Tank Bag ally_deformity mark_deformity nancy_deformity ted_deformity
1: 1A C1 spinal <NA> <NA> spinal
2: 1D C2 eye <NA> <NA> <NA>
3: 1F C2 <NA> head snout <NA>
4: 2A T1 <NA> <NA> <NA> eye
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。