一个数据集找到了它的方式,每个样本都占据许多行,每个行都用于某个变量(Type
(,如下所示:
ID Lat Lon Type %
01 yy1 xx1 A 30
01 yy1 xx1 B 45
01 yy1 xx1 C 25
02 yy2 xx2 A 10
02 yy2 xx2 B 60
02 yy2 xx2 C 30
03 yy3 xx3 A 15
...
我需要像这样重新排列它,为列Type
中的每个变量创建新列并删除%
列,使用它的条目填充新列:
ID Lat Lon A B C
01 yy1 xx1 30 45 25
02 yy2 xx2 10 60 30
03 yy3 xx3 15
...
你们中的任何一个R向导知道如何做到这一点吗?非常感谢任何帮助!
您可以使用:
reshape(df,dir="wide",timevar = "Type",idvar = c("ID","Lat","Lon"))
ID Lat Lon val.A val.B val.C
1 1 yy1 xx1 30 45 25
4 2 yy2 xx2 10 60 30
7 3 yy3 xx3 15 NA NA
或者使用tidyr
中的pivot_wider
您可以执行以下操作:
library(tidyr)
pivot_wider(df,id_cols = c("ID","Lat","Lon"),names_from = "Type",values_from = "val")
# A tibble: 3 x 6
ID Lat Lon A B C
<int> <fct> <fct> <int> <int> <int>
1 1 yy1 xx1 30 45 25
2 2 yy2 xx2 10 60 30
3 3 yy3 xx3 15 NA NA
DF:
df
ID Lat Lon Type val
1 1 yy1 xx1 A 30
2 1 yy1 xx1 B 45
3 1 yy1 xx1 C 25
4 2 yy2 xx2 A 10
5 2 yy2 xx2 B 60
6 2 yy2 xx2 C 30
7 3 yy3 xx3 A 15