为第一篇不起眼的帖子道歉,这是我第一次去这里。我修改了它,我希望现在更容易理解。
我一直在尝试将多个大型数据集从长格式转换为宽格式,然后使用公共标识符将它们合并在一起。
数据是渔业数据。目前,我需要将目标捕获数据从long转换为宽,并附加到已格式化为每行作为单个“TripSet”值的数据集,该值是整个数据集中的公共标识符。
我需要将数据集从long转换为wide的格式如下:
my.df <- data.frame(Trip=rep(c("A","B","C"), 5), Set=rep(1:5, each=3), CommonName=rep
(c("i","j","k"),5),TotCat=1:15, Kept=16:30, RtnAlive=31:45, RtnDead= 46:60, RtnUnk= 61:75)
my.df$TripSet <- paste(my.df$Trip,my.df$Set)
my.df
Trip Set CommonName TotCat Kept RtnAlive RtnDead RtnUnk TripSet
1 A 1 i 1 16 31 46 61 A 1
2 B 1 j 2 17 32 47 62 B 1
3 C 1 k 3 18 33 48 63 C 1
4 A 2 i 4 19 34 49 64 A 2
5 B 2 j 5 20 35 50 65 B 2
6 C 2 k 6 21 36 51 66 C 2
7 A 3 i 7 22 37 52 67 A 3
8 B 3 j 8 23 38 53 68 B 3
9 C 3 k 9 24 39 54 69 C 3
10 A 4 i 10 25 40 55 70 A 4
11 B 4 j 11 26 41 56 71 B 4
12 C 4 k 12 27 42 57 72 C 4
13 A 5 i 13 28 43 58 73 A 5
14 B 5 j 14 29 44 59 74 B 5
15 C 5 k 15 30 45 60 75 C 5
我可以使用cast或dcast从一个变量转换为long到wide,如下所示:
cast(my.df, TripSet ~ CommonName, value="TotCat")
TripSet i j k
1 A 1 1 NA NA
2 A 2 4 NA NA
3 A 3 7 NA NA
4 A 4 10 NA NA
5 A 5 13 NA NA
6 B 1 NA 2 NA
7 B 2 NA 5 NA
8 B 3 NA 8 NA
9 B 4 NA 11 NA
10 B 5 NA 14 NA
11 C 1 NA NA 3
12 C 2 NA NA 6
13 C 3 NA NA 9
14 C 4 NA NA 12
15 C 5 NA NA 15
但是我不确定我是否应该在这里获得如此多的NA值而不是零值。
我想要的数据格式是具有公共标识符'TripSet by row然后列中的每个物种按Common Name匹配'TotCat','Kept','RtnAlive','RtnDead','RtnUnk'。
我尝试融化然后重新编制数据如下:
dcast(melt(my.df, id.vars=c("TripSet", "CommonName")), TripSet~variable+CommonName)
TripSet Trip_i Trip_j Trip_k Set_i Set_j Set_k TotCat_i TotCat_j TotCat_k Kept_i Kept_j Kept_k RtnAlive_i RtnAlive_j RtnAlive_k RtnDead_i
1 A 1 A <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
2 A 2 A <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
3 A 3 A <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
4 A 4 A <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
5 A 5 A <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
6 B 1 <NA> B <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
7 B 2 <NA> B <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
8 B 3 <NA> B <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
9 B 4 <NA> B <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
10 B 5 <NA> B <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
11 C 1 <NA> <NA> C <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
12 C 2 <NA> <NA> C <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
13 C 3 <NA> <NA> C <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
14 C 4 <NA> <NA> C <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
15 C 5 <NA> <NA> C <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
这基本上是我的预期输出,但我不希望投射'Trip'和'Set'(以及我在实际数据集中的其他几个列变量),而只是采取'Kept','RtnAlive',' RtnDead','RtnUnk'作为附加度量变量,并且列名反映了所选的度量变量名和CommonName。
顺便说一下,由于没有数据,是否会生成NA值,因此,例如,在x个集合中没有保留通用名称或rtndead?
任何有关此的帮助将不胜感激。
答案 0 :(得分:0)
library(dplyr)
library(reshape2)
my.df %>%
melt(id.vars = c("Trip", "Set", "CommonName")) %>% # make tall
dcast(Trip + Set ~ variable + CommonName) # make wide
# Trip Set TotCat_i TotCat_j TotCat_k Kept_i Kept_j Kept_k RtnAlive_i RtnAlive_j RtnAlive_k RtnDead_i
# 1 A 1 1 NA NA 16 NA NA 31 NA NA 46
# 2 A 2 4 NA NA 19 NA NA 34 NA NA 49
# 3 A 3 7 NA NA 22 NA NA 37 NA NA 52
# 4 A 4 10 NA NA 25 NA NA 40 NA NA 55
# 5 A 5 13 NA NA 28 NA NA 43 NA NA 58
# 6 B 1 NA 2 NA NA 17 NA NA 32 NA NA
# 7 B 2 NA 5 NA NA 20 NA NA 35 NA NA
# 8 B 3 NA 8 NA NA 23 NA NA 38 NA NA
# 9 B 4 NA 11 NA NA 26 NA NA 41 NA NA
# 10 B 5 NA 14 NA NA 29 NA NA 44 NA NA
# 11 C 1 NA NA 3 NA NA 18 NA NA 33 NA
# 12 C 2 NA NA 6 NA NA 21 NA NA 36 NA
# 13 C 3 NA NA 9 NA NA 24 NA NA 39 NA
# 14 C 4 NA NA 12 NA NA 27 NA NA 42 NA
# 15 C 5 NA NA 15 NA NA 30 NA NA 45 NA