首页 > 解决方案 > 如何用时间步长替换矩阵的列

问题描述

我想替换矩阵的列。每列代表以 10 分钟间隔测量的时间步长。所以,act1_14:00amact1_24:10am,等等。我提供了一个如何解决这个问题的例子,但有没有更有效和更好的方法?非常感谢

我的样本数据

structure(list(act1_1 = structure(c(110, 110), label = "Primary activity: 04:00-04:10", format.stata = "%8.0g"), 
    act1_2 = structure(c(110, 110), label = "Primary activity: 04:10-04:20", format.stata = "%8.0g"), 
    act1_3 = structure(c(110, 110), label = "Primary activity: 04:20-04:30", format.stata = "%8.0g"), 
    act1_4 = structure(c(110, 110), label = "Primary activity: 04:30-04:40", format.stata = "%8.0g"), 
    act1_5 = structure(c(110, 110), label = "Primary activity: 04:40-04:50", format.stata = "%8.0g"), 
    act1_6 = structure(c(110, 110), label = "Primary activity: 04:50-05:00", format.stata = "%8.0g"), 
    act1_7 = structure(c(110, 110), label = "Primary activity: 05:00-05:10", format.stata = "%8.0g"), 
    act1_8 = structure(c(110, 110), label = "Primary activity: 05:10-05:20", format.stata = "%8.0g"), 
    act1_9 = structure(c(110, 110), label = "Primary activity: 05:20-05:30", format.stata = "%8.0g"), 
    act1_10 = structure(c(110, 110), label = "Primary activity: 05:30-05:40", format.stata = "%8.0g"), 
    act1_11 = structure(c(110, 110), label = "Primary activity: 05:40-05:50", format.stata = "%8.0g"), 
    act1_12 = structure(c(8219, 110), label = "Primary activity: 05:50-06:00", format.stata = "%8.0g"), 
    act1_13 = structure(c(310, 110), label = "Primary activity: 06:00-06:10", format.stata = "%8.0g"), 
    act1_14 = structure(c(3210, 110), label = "Primary activity: 06:10-06:20", format.stata = "%8.0g"), 
    act1_15 = structure(c(3110, 110), label = "Primary activity: 06:20-06:30", format.stata = "%8.0g"), 
    act1_16 = structure(c(7241, 110), label = "Primary activity: 06:30-06:40", format.stata = "%8.0g"), 
    act1_17 = structure(c(210, 110), label = "Primary activity: 06:40-06:50", format.stata = "%8.0g"), 
    act1_18 = structure(c(3819, 110), label = "Primary activity: 06:50-07:00", format.stata = "%8.0g"), 
    act1_19 = structure(c(210, 110), label = "Primary activity: 07:00-07:10", format.stata = "%8.0g"), 
    act1_20 = structure(c(210, 310), label = "Primary activity: 07:10-07:20", format.stata = "%8.0g"), 
    act1_21 = structure(c(210, 210), label = "Primary activity: 07:20-07:30", format.stata = "%8.0g"), 
    act1_22 = structure(c(3310, 310), label = "Primary activity: 07:30-07:40", format.stata = "%8.0g"), 
    act1_23 = structure(c(3210, 310), label = "Primary activity: 07:40-07:50", format.stata = "%8.0g"), 
    act1_24 = structure(c(3210, 9210), label = "Primary activity: 07:50-08:00", format.stata = "%8.0g"), 
    act1_25 = structure(c(3210, 9210), label = "Primary activity: 08:00-08:10", format.stata = "%8.0g"), 
    act1_26 = structure(c(3210, 9210), label = "Primary activity: 08:10-08:20", format.stata = "%8.0g"), 
    act1_27 = structure(c(3110, 9210), label = "Primary activity: 08:20-08:30", format.stata = "%8.0g"), 
    act1_28 = structure(c(3110, 9210), label = "Primary activity: 08:30-08:40", format.stata = "%8.0g"), 
    act1_29 = structure(c(3110, 9210), label = "Primary activity: 08:40-08:50", format.stata = "%8.0g"), 
    act1_30 = structure(c(3110, 9210), label = "Primary activity: 08:50-09:00", format.stata = "%8.0g"), 
    act1_31 = structure(c(7259, 2110), label = "Primary activity: 09:00-09:10", format.stata = "%8.0g"), 
    act1_32 = structure(c(5140, 2110), label = "Primary activity: 09:10-09:20", format.stata = "%8.0g"), 
    act1_33 = structure(c(5140, 2110), label = "Primary activity: 09:20-09:30", format.stata = "%8.0g"), 
    act1_34 = structure(c(5140, 2110), label = "Primary activity: 09:30-09:40", format.stata = "%8.0g"), 
    act1_35 = structure(c(5140, 2110), label = "Primary activity: 09:40-09:50", format.stata = "%8.0g"), 
    act1_36 = structure(c(5140, 2110), label = "Primary activity: 09:50-10:00", format.stata = "%8.0g"), 
    act1_37 = structure(c(7259, 2110), label = "Primary activity: 10:00-10:10", format.stata = "%8.0g"), 
    act1_38 = structure(c(7259, 2110), label = "Primary activity: 10:10-10:20", format.stata = "%8.0g"), 
    act1_39 = structure(c(7259, 2110), label = "Primary activity: 10:20-10:30", format.stata = "%8.0g"), 
    act1_40 = structure(c(7259, 2110), label = "Primary activity: 10:30-10:40", format.stata = "%8.0g"), 
    act1_41 = structure(c(7259, 2110), label = "Primary activity: 10:40-10:50", format.stata = "%8.0g"), 
    act1_42 = structure(c(7259, 2110), label = "Primary activity: 10:50-11:00", format.stata = "%8.0g"), 
    act1_43 = structure(c(3110, 2110), label = "Primary activity: 11:00-11:10", format.stata = "%8.0g"), 
    act1_44 = structure(c(5140, 2110), label = "Primary activity: 11:10-11:20", format.stata = "%8.0g"), 
    act1_45 = structure(c(5140, 2110), label = "Primary activity: 11:20-11:30", format.stata = "%8.0g"), 
    act1_46 = structure(c(8120, 2110), label = "Primary activity: 11:30-11:40", format.stata = "%8.0g"), 
    act1_47 = structure(c(8120, 2110), label = "Primary activity: 11:40-11:50", format.stata = "%8.0g"), 
    act1_48 = structure(c(8120, 2110), label = "Primary activity: 11:50-12:00", format.stata = "%8.0g"), 
    act1_49 = structure(c(8120, 2110), label = "Primary activity: 12:00-12:10", format.stata = "%8.0g"), 
    act1_50 = structure(c(8120, 2110), label = "Primary activity: 12:10-12:20", format.stata = "%8.0g"), 
    act1_51 = structure(c(8120, 2110), label = "Primary activity: 12:20-12:30", format.stata = "%8.0g"), 
    act1_52 = structure(c(8120, 2110), label = "Primary activity: 12:30-12:40", format.stata = "%8.0g"), 
    act1_53 = structure(c(8120, 2110), label = "Primary activity: 12:40-12:50", format.stata = "%8.0g"), 
    act1_54 = structure(c(8120, 2110), label = "Primary activity: 12:50-13:00", format.stata = "%8.0g"), 
    act1_55 = structure(c(210, 2110), label = "Primary activity: 13:00-13:10", format.stata = "%8.0g"), 
    act1_56 = structure(c(210, 2110), label = "Primary activity: 13:10-13:20", format.stata = "%8.0g"), 
    act1_57 = structure(c(210, 210), label = "Primary activity: 13:20-13:30", format.stata = "%8.0g"), 
    act1_58 = structure(c(210, 210), label = "Primary activity: 13:30-13:40", format.stata = "%8.0g"), 
    act1_59 = structure(c(210, 210), label = "Primary activity: 13:40-13:50", format.stata = "%8.0g"), 
    act1_60 = structure(c(210, 210), label = "Primary activity: 13:50-14:00", format.stata = "%8.0g"), 
    act1_61 = structure(c(9360, 210), label = "Primary activity: 14:00-14:10", format.stata = "%8.0g"), 
    act1_62 = structure(c(9360, 210), label = "Primary activity: 14:10-14:20", format.stata = "%8.0g"), 
    act1_63 = structure(c(9360, 210), label = "Primary activity: 14:20-14:30", format.stata = "%8.0g"), 
    act1_64 = structure(c(9360, 2110), label = "Primary activity: 14:30-14:40", format.stata = "%8.0g"), 
    act1_65 = structure(c(9360, 2110), label = "Primary activity: 14:40-14:50", format.stata = "%8.0g"), 
    act1_66 = structure(c(9360, 2110), label = "Primary activity: 14:50-15:00", format.stata = "%8.0g"), 
    act1_67 = structure(c(3610, 2110), label = "Primary activity: 15:00-15:10", format.stata = "%8.0g"), 
    act1_68 = structure(c(3610, 2110), label = "Primary activity: 15:10-15:20", format.stata = "%8.0g"), 
    act1_69 = structure(c(3610, 2110), label = "Primary activity: 15:20-15:30", format.stata = "%8.0g"), 
    act1_70 = structure(c(3610, 9210), label = "Primary activity: 15:30-15:40", format.stata = "%8.0g"), 
    act1_71 = structure(c(3610, 9210), label = "Primary activity: 15:40-15:50", format.stata = "%8.0g"), 
    act1_72 = structure(c(3610, 9210), label = "Primary activity: 15:50-16:00", format.stata = "%8.0g"), 
    act1_73 = structure(c(3240, 9210), label = "Primary activity: 16:00-16:10", format.stata = "%8.0g"), 
    act1_74 = structure(c(3240, 9210), label = "Primary activity: 16:10-16:20", format.stata = "%8.0g"), 
    act1_75 = structure(c(3110, 9210), label = "Primary activity: 16:20-16:30", format.stata = "%8.0g"), 
    act1_76 = structure(c(3110, 9210), label = "Primary activity: 16:30-16:40", format.stata = "%8.0g"), 
    act1_77 = structure(c(3110, 9210), label = "Primary activity: 16:40-16:50", format.stata = "%8.0g"), 
    act1_78 = structure(c(3110, 9210), label = "Primary activity: 16:50-17:00", format.stata = "%8.0g"), 
    act1_79 = structure(c(7220, 7330), label = "Primary activity: 17:00-17:10", format.stata = "%8.0g"), 
    act1_80 = structure(c(7220, 7330), label = "Primary activity: 17:10-17:20", format.stata = "%8.0g"), 
    act1_81 = structure(c(7220, 7330), label = "Primary activity: 17:20-17:30", format.stata = "%8.0g"), 
    act1_82 = structure(c(7220, 7330), label = "Primary activity: 17:30-17:40", format.stata = "%8.0g"), 
    act1_83 = structure(c(7220, 7330), label = "Primary activity: 17:40-17:50", format.stata = "%8.0g"), 
    act1_84 = structure(c(7220, 7330), label = "Primary activity: 17:50-18:00", format.stata = "%8.0g"), 
    act1_85 = structure(c(210, 7330), label = "Primary activity: 18:00-18:10", format.stata = "%8.0g"), 
    act1_86 = structure(c(210, 7330), label = "Primary activity: 18:10-18:20", format.stata = "%8.0g"), 
    act1_87 = structure(c(210, 2120), label = "Primary activity: 18:20-18:30", format.stata = "%8.0g"), 
    act1_88 = structure(c(210, 2120), label = "Primary activity: 18:30-18:40", format.stata = "%8.0g"), 
    act1_89 = structure(c(210, 2120), label = "Primary activity: 18:40-18:50", format.stata = "%8.0g"), 
    act1_90 = structure(c(8210, 2120), label = "Primary activity: 18:50-19:00", format.stata = "%8.0g"), 
    act1_91 = structure(c(8210, 210), label = "Primary activity: 19:00-19:10", format.stata = "%8.0g"), 
    act1_92 = structure(c(8210, 210), label = "Primary activity: 19:10-19:20", format.stata = "%8.0g"), 
    act1_93 = structure(c(8210, 210), label = "Primary activity: 19:20-19:30", format.stata = "%8.0g"), 
    act1_94 = structure(c(8210, 8210), label = "Primary activity: 19:30-19:40", format.stata = "%8.0g"), 
    act1_95 = structure(c(8210, 8210), label = "Primary activity: 19:40-19:50", format.stata = "%8.0g"), 
    act1_96 = structure(c(8210, 8210), label = "Primary activity: 19:50-20:00", format.stata = "%8.0g"), 
    act1_97 = structure(c(3130, 8210), label = "Primary activity: 20:00-20:10", format.stata = "%8.0g"), 
    act1_98 = structure(c(3130, 8210), label = "Primary activity: 20:10-20:20", format.stata = "%8.0g"), 
    act1_99 = structure(c(3130, 8210), label = "Primary activity: 20:20-20:30", format.stata = "%8.0g"), 
    act1_100 = structure(c(3130, 3110), label = "Primary activity: 20:30-20:40", format.stata = "%8.0g"), 
    act1_101 = structure(c(3130, 210), label = "Primary activity: 20:40-20:50", format.stata = "%8.0g"), 
    act1_102 = structure(c(5110, 2120), label = "Primary activity: 20:50-21:00", format.stata = "%8.0g"), 
    act1_103 = structure(c(7220, 2120), label = "Primary activity: 21:00-21:10", format.stata = "%8.0g"), 
    act1_104 = structure(c(7220, 2120), label = "Primary activity: 21:10-21:20", format.stata = "%8.0g"), 
    act1_105 = structure(c(7220, 2120), label = "Primary activity: 21:20-21:30", format.stata = "%8.0g"), 
    act1_106 = structure(c(7220, 310), label = "Primary activity: 21:30-21:40", format.stata = "%8.0g"), 
    act1_107 = structure(c(7220, 8210), label = "Primary activity: 21:40-21:50", format.stata = "%8.0g"), 
    act1_108 = structure(c(7220, 8210), label = "Primary activity: 21:50-22:00", format.stata = "%8.0g"), 
    act1_109 = structure(c(5110, 310), label = "Primary activity: 22:00-22:10", format.stata = "%8.0g"), 
    act1_110 = structure(c(5110, 110), label = "Primary activity: 22:10-22:20", format.stata = "%8.0g"), 
    act1_111 = structure(c(5110, 110), label = "Primary activity: 22:20-22:30", format.stata = "%8.0g"), 
    act1_112 = structure(c(5110, 110), label = "Primary activity: 22:30-22:40", format.stata = "%8.0g"), 
    act1_113 = structure(c(5110, 110), label = "Primary activity: 22:40-22:50", format.stata = "%8.0g"), 
    act1_114 = structure(c(5110, 110), label = "Primary activity: 22:50-23:00", format.stata = "%8.0g"), 
    act1_115 = structure(c(5110, 110), label = "Primary activity: 23:00-23:10", format.stata = "%8.0g"), 
    act1_116 = structure(c(5110, 110), label = "Primary activity: 23:10-23:20", format.stata = "%8.0g"), 
    act1_117 = structure(c(5110, 110), label = "Primary activity: 23:20-23:30", format.stata = "%8.0g"), 
    act1_118 = structure(c(5110, 110), label = "Primary activity: 23:30-23:40", format.stata = "%8.0g"), 
    act1_119 = structure(c(7220, 110), label = "Primary activity: 23:40-23:50", format.stata = "%8.0g"), 
    act1_120 = structure(c(7220, 110), label = "Primary activity: 23:50-00:00", format.stata = "%8.0g"), 
    act1_121 = structure(c(7220, 110), label = "Primary activity: 00:00-00:10", format.stata = "%8.0g"), 
    act1_122 = structure(c(7220, 110), label = "Primary activity: 00:10-00:20", format.stata = "%8.0g"), 
    act1_123 = structure(c(7220, 110), label = "Primary activity: 00:20-00:30", format.stata = "%8.0g"), 
    act1_124 = structure(c(7220, 110), label = "Primary activity: 00:30-00:40", format.stata = "%8.0g"), 
    act1_125 = structure(c(7220, 110), label = "Primary activity: 00:40-00:50", format.stata = "%8.0g"), 
    act1_126 = structure(c(7220, 110), label = "Primary activity: 00:50-01:00", format.stata = "%8.0g"), 
    act1_127 = structure(c(110, 110), label = "Primary activity: 01:00-01:10", format.stata = "%8.0g"), 
    act1_128 = structure(c(110, 110), label = "Primary activity: 01:10-01:20", format.stata = "%8.0g"), 
    act1_129 = structure(c(110, 110), label = "Primary activity: 01:20-01:30", format.stata = "%8.0g"), 
    act1_130 = structure(c(110, 110), label = "Primary activity: 01:30-01:40", format.stata = "%8.0g"), 
    act1_131 = structure(c(110, 110), label = "Primary activity: 01:40-01:50", format.stata = "%8.0g"), 
    act1_132 = structure(c(110, 110), label = "Primary activity: 01:50-02:00", format.stata = "%8.0g"), 
    act1_133 = structure(c(110, 110), label = "Primary activity: 02:00-02:10", format.stata = "%8.0g"), 
    act1_134 = structure(c(110, 110), label = "Primary activity: 02:10-02:20", format.stata = "%8.0g"), 
    act1_135 = structure(c(110, 110), label = "Primary activity: 02:20-02:30", format.stata = "%8.0g"), 
    act1_136 = structure(c(110, 110), label = "Primary activity: 02:30-02:40", format.stata = "%8.0g"), 
    act1_137 = structure(c(110, 110), label = "Primary activity: 02:40-02:50", format.stata = "%8.0g"), 
    act1_138 = structure(c(110, 110), label = "Primary activity: 02:50-03:00", format.stata = "%8.0g"), 
    act1_139 = structure(c(110, 110), label = "Primary activity: 03:00-03:10", format.stata = "%8.0g"), 
    act1_140 = structure(c(110, 110), label = "Primary activity: 03:10-03:20", format.stata = "%8.0g"), 
    act1_141 = structure(c(110, 110), label = "Primary activity: 03:20-03:30", format.stata = "%8.0g"), 
    act1_142 = structure(c(110, 110), label = "Primary activity: 03:30-03:40", format.stata = "%8.0g"), 
    act1_143 = structure(c(110, 110), label = "Primary activity: 03:40-03:50", format.stata = "%8.0g"), 
    act1_144 = structure(c(110, 110), label = "Primary activity: 03:50-04:00", format.stata = "%8.0g")), class = "data.frame", row.names = c(NA, 
-2L))

一种方法如下(或仅输入时间 c("04:00", "04:10", ... 等等)):

colnames(df)<-  c("act1_1"="04:00", "act1_2"="04:10", "act1_3"="04:20", "act1_4"="04:30", "act1_5"="04:40", "act1_6"="04:50", 
                       "act1_7"="05:00", "act1_8"="05:10", "act1_9"="05:20", "act1_10"="05:30", "act1_11"="05:40", "act1_12"="05:50",
                       "act1_13"="06:00", "act1_14"="06:10", "act1_15"="06:20", "act1_16"="06:30", "act1_17"="06:40", "act1_18"="06:50", 
                       "act1_19"="07:00", "act1_20"="07:10", "act1_21"="07:20", "act1_22"="07:30", "act1_23"="07:40", "act1_24"="07:50",
                       "act1_25"="08:00", "act1_26"="08:10", "act1_27"="08:20", "act1_28"="08:30", "act1_29"="08:40", "act1_30"="08:50",
                       "act1_31"="09:00", "act1_32"="09:10", "act1_33"="09:20", "act1_34"="09:30", "act1_35"="09:40", "act1_36"="09:50", 
                       "act1_37"="10:00", "act1_38"="10:10", "act1_39"="10:20", "act1_40"="10:30", "act1_41"="10:40", "act1_42"="10:50", 
                       "act1_43"="11:00", "act1_44"="11:10", "act1_45"="11:20", "act1_46"="11:30", "act1_47"="11:40", "act1_48"="11:50", 
                       "act1_49"="12:00", "act1_50"="12:10", "act1_51"="12:20", "act1_52"="12:30", "act1_53"="12:40", "act1_54"="12:50", 
                       "act1_55"="13:00", "act1_56"="13:10","act1_57"="13:20", "act1_58"="13:30", "act1_59"="13:40", "act1_60"="13:50",
                       "act1_61"="14:00", "act1_62"="14:10", "act1_63"="14:20", "act1_64"="14:30", "act1_65"="14:40", "act1_66"="14:50", 
                       "act1_67"="15:00", "act1_68"="15:10", "act1_69"="15:20", "act1_70"="15:30",  "act1_71"="15:40",  "act1_72"="15:50", 
                       "act1_73"="16:00", "act1_74"="16:10", "act1_75"="16:20", "act1_76"="16:30", "act1_77"="16:40", "act1_78"="16:50", 
                       "act1_79"="17:00", "act1_80"="17:10","act1_81"="17:20", "act1_82"="17:30", "act1_83"="17:40", "act1_84"="17:50", 
                       "act1_85"="18:00", "act1_86"="18:10", "act1_87"="18:20", "act1_88"="18:30", "act1_89"="18:40", "act1_90"="18:50",
                       "act1_91"="19:00", "act1_92"="19:10", "act1_93"="19:20", "act1_94"="19:30", "act1_95"="19:40", "act1_96"="19:50", 
                       "act1_97"="20:00", "act1_98"="20:10", "act1_99"="20:20", "act1_100"="20:30", "act1_101"="20:40", "act1_102"="20:50", 
                       "act1_103"="21:00", "act1_104"="21:10", "act1_105"="21:20", "act1_106"="21:30", "act1_107"="21:40", "act1_108"="21:50", 
                       "act1_109"="22:00","act1_110"="22:10", "act1_111"="22:20", "act1_112"="22:30", "act1_113"="22:40", "act1_114"="22:50",  
                       "act1_115"="23:00", "act1_116"="23:10", "act1_117"="23:20", "act1_118"="23:30", "act1_119"="23:40", "act1_120"="23:50",
                       "act1_121"="00:00", "act1_122"="00:10", "act1_123"="00:20", "act1_124"="00:30", "act1_125"="00:40", "act1_126"="00:50", 
                       "act1_127"="01:00", "act1_128"="01:10", "act1_129"="01:20", "act1_130"="01:30", "act1_131"="01:40", "act1_132"="01:50",
                       "act1_133"="02:00", "act1_134"="02:10", "act1_135"="02:20", "act1_136"="02:30", "act1_137"="02:40", "act1_138"="02:50", 
                       "act1_139"="03:00", "act1_140"="03:10", "act1_141"="03:20", "act1_142"="03:30" , "act1_143"="03:40", "act1_144"="03:50")

标签: rdataframematrix

解决方案


提供的数据对象确实包含一个可用作列名的属性:

names(DF) <- make.names(sapply(DF, attr, which = "label"))

DF[, 1:3]
  Primary.activity..04.00.04.10 Primary.activity..04.10.04.20 Primary.activity..04.20.04.30
1                           110                           110                           110
2                           110                           110                           110

sapply(DF, attr, which = "label")"label"从数据框的每一列中提取属性。make.names()把它变成语法上有效的名字。

或者,可以从"label"属性中提取周期的开始时间:

library(magrittr)   # piping used to improve readability
sapply(DF, attr, which = "label") %>% stringr::str_extract("\\d{2}:\\d{2}")
  [1] "04:00" "04:10" "04:20" "04:30" "04:40" "04:50" "05:00" "05:10" "05:20" "05:30" "05:40" "05:50" "06:00" "06:10" "06:20"
 [16] "06:30" "06:40" "06:50" "07:00" "07:10" "07:20" "07:30" "07:40" "07:50" "08:00" "08:10" "08:20" "08:30" "08:40" "08:50"
  ...

或获取语法有效的名称:

library(magrittr)   # piniping used to improve readability
sapply(DF, attr, which = "label") %>% 
  stringr::str_extract("\\d{2}:\\d{2}") %>% 
  make.names()
  [1] "X04.00" "X04.10" "X04.20" "X04.30" "X04.40" "X04.50" "X05.00" "X05.10" "X05.20" "X05.30" "X05.40" "X05.50" "X06.00"
 [14] "X06.10" "X06.20" "X06.30" "X06.40" "X06.50" "X07.00" "X07.10" "X07.20" "X07.30" "X07.40" "X07.50" "X08.00" "X08.10"
  ...

推荐阅读