从广泛到长的一组变量重塑(reshape from wide to long group of variables)
这个问题与已经存在的问题非常相似。
但是我无法将其扩展到多组变量。 这是我正在处理的数据集
A tibble: 12 x 9 Month Cabo_BU_PCT Acapulco_BU_PCT Cabo_LOS_AVG Acapulco_LOS_AVG BED_BUGS_Cabo BED_BUGS_Acapulco TOTAL_OCCUPIED_Cabo TOTAL_OCCUPIED_Acapulco 1 0.6470034 0.6260116 5.223000 4.307667 5 3 19216 6498 2 0.6167027 0.6777457 5.893571 4.247500 3 0 17095 6566 3 0.6372108 0.6348126 5.229677 4.327742 5 1 19556 6809 4 0.6357912 0.6548170 5.356667 4.220000 4 6 18883 6797 5 0.6449006 0.6409659 5.344194 4.162903 2 5 19792 6875 6 0.6747811 0.6935453 5.812667 4.362000 4 3 20041 7199 7 0.6697947 0.6932687 5.544516 4.462903 5 6 20556 7436 8 0.6595960 0.6777923 5.260323 4.135806 0 7 20243 7270 9 0.6792256 0.6863198 5.424333 4.133333 5 0 20173 7124 10 0.6976214 0.7370875 5.419677 4.350000 3 3 21410 7906 11 0.6600337 0.6615607 5.450000 4.184333 3 2 19603 6867 12 0.6761812 0.6773261 5.347097 4.318710 2 2 20752 7265
我的目标是将其重新塑造成如下所示的长格式,其中列
Cabo_BU_PCT Acapulco_BU_PCT
在列名称BU_PCT
下转换为长格式,类似列Cabo_LOS_AVG Acapulco_LOS_AVG
在列名称LOS_AVG等下转换为长格式。Month Location BU_PCT LOS_AVG BED_BUGS TOTAL_OCCUPIED 1 Cabo 0.6470034 5.223000 5 19216 1 Acapulco 0.6260116 4.307667 3 6498 2 Cabo 0.6167027 5.893571 3 17095 2 Acapulco 0.6777457 4.247500 0 6566 . . . 12 Cabo 0.6761812 5.347097 2 20752 12 Acapulco 0.6773261 4.318710 2 7265
任何帮助重塑这个数据框非常感谢。 谢谢。
========数据集===========
df_wide <- structure(list(Month = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ), Cabo_BU_PCT = c(0.647003367003367, 0.616702741702742, 0.637210817855979, 0.635791245791246, 0.644900619094168, 0.674781144781145, 0.669794721407625, 0.65959595959596, 0.679225589225589, 0.69762137504073, 0.66003367003367, 0.676181166503747), Acapulco_BU_PCT = c(0.626011560693642, 0.677745664739884, 0.634812604885325, 0.654816955684008, 0.640965877307477, 0.69354527938343, 0.693268692895767, 0.677792280440052, 0.686319845857418, 0.737087451053515, 0.661560693641619, 0.677326123438374), Cabo_LOS_AVG = c(5.223, 5.89357142857143, 5.22967741935484, 5.35666666666667, 5.3441935483871, 5.81266666666667, 5.54451612903226, 5.26032258064516, 5.42433333333333, 5.41967741935484, 5.45, 5.34709677419355), Acapulco_LOS_AVG = c(4.30766666666667, 4.2475, 4.32774193548387, 4.22, 4.16290322580645, 4.362, 4.46290322580645, 4.1358064516129, 4.13333333333333, 4.35, 4.18433333333333, 4.31870967741935 ), BED_BUGS_Cabo = c(5, 3, 5, 4, 2, 4, 5, 0, 5, 3, 3, 2), BED_BUGS_Acapulco = c(3, 0, 1, 6, 5, 3, 6, 7, 0, 3, 2, 2), TOTAL_OCCUPIED_Cabo = c(19216, 17095, 19556, 18883, 19792, 20041, 20556, 20243, 20173, 21410, 19603, 20752), TOTAL_OCCUPIED_Acapulco = c(6498, 6566, 6809, 6797, 6875, 7199, 7436, 7270, 7124, 7906, 6867, 7265)), class = c("tbl_df", "tbl", "data.frame"), .Names = c("Month", "Cabo_BU_PCT", "Acapulco_BU_PCT", "Cabo_LOS_AVG", "Acapulco_LOS_AVG", "BED_BUGS_Cabo", "BED_BUGS_Acapulco", "TOTAL_OCCUPIED_Cabo", "TOTAL_OCCUPIED_Acapulco"), row.names = c(NA, -12L))
This question is very similar to an already existing question.
However I am unable to extend this to multiple groups of variables. This is the dataset I am dealing with
A tibble: 12 x 9 Month Cabo_BU_PCT Acapulco_BU_PCT Cabo_LOS_AVG Acapulco_LOS_AVG BED_BUGS_Cabo BED_BUGS_Acapulco TOTAL_OCCUPIED_Cabo TOTAL_OCCUPIED_Acapulco 1 0.6470034 0.6260116 5.223000 4.307667 5 3 19216 6498 2 0.6167027 0.6777457 5.893571 4.247500 3 0 17095 6566 3 0.6372108 0.6348126 5.229677 4.327742 5 1 19556 6809 4 0.6357912 0.6548170 5.356667 4.220000 4 6 18883 6797 5 0.6449006 0.6409659 5.344194 4.162903 2 5 19792 6875 6 0.6747811 0.6935453 5.812667 4.362000 4 3 20041 7199 7 0.6697947 0.6932687 5.544516 4.462903 5 6 20556 7436 8 0.6595960 0.6777923 5.260323 4.135806 0 7 20243 7270 9 0.6792256 0.6863198 5.424333 4.133333 5 0 20173 7124 10 0.6976214 0.7370875 5.419677 4.350000 3 3 21410 7906 11 0.6600337 0.6615607 5.450000 4.184333 3 2 19603 6867 12 0.6761812 0.6773261 5.347097 4.318710 2 2 20752 7265
My goal is to reshape this into a long format like this below, where the columns,
Cabo_BU_PCT Acapulco_BU_PCT
are transformed to long format under column nameBU_PCT
, similarly columns,Cabo_LOS_AVG Acapulco_LOS_AVG
are transformed to long format under column name LOS_AVG so on.Month Location BU_PCT LOS_AVG BED_BUGS TOTAL_OCCUPIED 1 Cabo 0.6470034 5.223000 5 19216 1 Acapulco 0.6260116 4.307667 3 6498 2 Cabo 0.6167027 5.893571 3 17095 2 Acapulco 0.6777457 4.247500 0 6566 . . . 12 Cabo 0.6761812 5.347097 2 20752 12 Acapulco 0.6773261 4.318710 2 7265
Any help in reshaping this dataframe is much appreciated. Thanks.
======== dataset ===========
df_wide <- structure(list(Month = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ), Cabo_BU_PCT = c(0.647003367003367, 0.616702741702742, 0.637210817855979, 0.635791245791246, 0.644900619094168, 0.674781144781145, 0.669794721407625, 0.65959595959596, 0.679225589225589, 0.69762137504073, 0.66003367003367, 0.676181166503747), Acapulco_BU_PCT = c(0.626011560693642, 0.677745664739884, 0.634812604885325, 0.654816955684008, 0.640965877307477, 0.69354527938343, 0.693268692895767, 0.677792280440052, 0.686319845857418, 0.737087451053515, 0.661560693641619, 0.677326123438374), Cabo_LOS_AVG = c(5.223, 5.89357142857143, 5.22967741935484, 5.35666666666667, 5.3441935483871, 5.81266666666667, 5.54451612903226, 5.26032258064516, 5.42433333333333, 5.41967741935484, 5.45, 5.34709677419355), Acapulco_LOS_AVG = c(4.30766666666667, 4.2475, 4.32774193548387, 4.22, 4.16290322580645, 4.362, 4.46290322580645, 4.1358064516129, 4.13333333333333, 4.35, 4.18433333333333, 4.31870967741935 ), BED_BUGS_Cabo = c(5, 3, 5, 4, 2, 4, 5, 0, 5, 3, 3, 2), BED_BUGS_Acapulco = c(3, 0, 1, 6, 5, 3, 6, 7, 0, 3, 2, 2), TOTAL_OCCUPIED_Cabo = c(19216, 17095, 19556, 18883, 19792, 20041, 20556, 20243, 20173, 21410, 19603, 20752), TOTAL_OCCUPIED_Acapulco = c(6498, 6566, 6809, 6797, 6875, 7199, 7436, 7270, 7124, 7906, 6867, 7265)), class = c("tbl_df", "tbl", "data.frame"), .Names = c("Month", "Cabo_BU_PCT", "Acapulco_BU_PCT", "Cabo_LOS_AVG", "Acapulco_LOS_AVG", "BED_BUGS_Cabo", "BED_BUGS_Acapulco", "TOTAL_OCCUPIED_Cabo", "TOTAL_OCCUPIED_Acapulco"), row.names = c(NA, -12L))
原文:https://stackoverflow.com/questions/47425451
最满意答案
如果要在保存时自动分配ID,则必须使用
@GeneratedValue(strategy=GenerationType.IDENTITY)
注释ID列If you want to assign ids automatically on save then you must annotate ID column with
@GeneratedValue(strategy=GenerationType.IDENTITY)
相关问答
更多-
是不是有一款什么手机软件,可以很自然的拉长腿部?不是美图秀秀,有知道的不?[2022-10-20]
spring -
春天的英语怎么读?[2022-05-21]
spring -
我们可以使用@JsonDeserialize策略来实现它: 定义BarDeserializer类: public class BarDeserializer extends JsonDeserializer
{ @Override public Bar deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { Jso ... -
字符串作为Spring实体的Id(String as Id for Spring entity)[2023-07-11]
如果要在保存时自动分配ID,则必须使用@GeneratedValue(strategy=GenerationType.IDENTITY)注释ID列 If you want to assign ids automatically on save then you must annotate ID column with @GeneratedValue(strategy=GenerationType.IDENTITY) -
将City.groovy重命名为City.java,现在它运行正常。 感谢@highstakes Renamed City.groovy to City.java, and now it working fine. Thanks to @highstakes
-
我认为如果为此操作创建非托管bean并将其作为表单支持bean传递会更好。 public class DemandBean { private Long id; private String name; ... // more fields } 控制器: @RequestMapping(value = "/details/update", method = RequestMethod.POST) public String updateDemand(@Valid @Mod ...
-
如何通过ID加入实体(How to join entity by id)[2022-05-22]
它通过以下配置解决: @JoinFormula(value="SELECT v.ROW_ID FROM VOCAB v WHERE v.NAME=STATUS_ID AND v.TYPE='ACT_STAT'") @ManyToOne @NotFound(action = NotFoundAction.IGNORE) private VocabValue status; 谢谢 ) It was solved with following configuration: @JoinFormula(val ... -
您可以在此处描述的JPA规范中找到事务回滚的行为。 想象一下,你在同一个交易中做了两个操作: //begin transaction em.persist(entity1); em.merge(entity2);//here is thrown an exception //commit transaction 在此示例中,它与JPA兼容,您在entity1中获取ID,因为在事务回滚时,即在调用merge() ,entity1具有ID。 另请注意,根据JPA,PersistentContext可能仍处于不 ...
-
我暂时决定使用UUID.randomUUID(),但我仍然渴望了解通过hibernate生成两个id的其他可能的解决方案。 I have temporary decided to use UUID.randomUUID(), but I am still eager to hear about other possible solutions for generating both ids through hibernate.
-
也许你可以尝试这样的事情。 您可以创建PrePersist方法,该方法可以在持久化之前修改该值。 @PrePersist public void initializeUUID() { if (applicationId == null) { applicationId = UUID.randomUUID().toString().subString(0, 32); } else { applicationId = applicationId.toString( ...