尝试通过 for 循环计算数据框中多列的比率

问题描述 投票:0回答:1

我正在使用 R 计算列中的简单比率并将这些值保存在另一个表中。在包含的 str 中看到的列是一月中的每一天和一月中每一天的每小时。出于该项目的目的,我必须计算该月的所有小时。我得到了一个合适的表,但所有值都是 NA,所以逻辑或我的尝试在某个地方失败了,我已经阅读了我能读到的所有内容。我已经达到了寻找问题的极限,我需要帮助。

library(dplyr)
library(purrr)

RATIO_2019_01_df <- test_df %>% 
                    select(AREA, RAW_STOP_COUNTS, RAW_DEVICE_COUNTS)

#error checking:
#print(names(test_df))

# Loop through the days and calculate ratios
# Note '1:31' in the for loop is the number of days in the month, adjust for each month
for (day in 1:31) {  
  day_column <- paste0("Day_", sprintf("%02d", day))

  # Loop through 24 hours
  for (hour in 1:24) {  
    hour_column <- paste0("Day_", sprintf("%02d", day), "_hr_", sprintf("%02d", hour))

    # Calculate the ratio for each hour and add it as a new column in ratio_df
    ratio_column <- paste0("Ratio_Day_", sprintf("%02d", day), "_hr_", sprintf("%02d", hour))
    RATIO_2019_01_df[[ratio_column]] <- ifelse(test_df[[day_column]] != 0,
                                            RATIO_2019_01_df[[hour_column]] / RATIO_2019_01_df[[day_column]], 0) 
                                            #Assign 0 (zero) for instances where the denominator = zero
  }
}

这是 str(仅针对空间的 1 个观察)

structure(list(AREA = 484391216083, RAW_STOP_COUNTS = 13553, 
    RAW_DEVICE_COUNTS = 2494, Day_01 = 299, Day_02 = 311, Day_03 = 351, 
    Day_04 = 384, Day_05 = 376, Day_06 = 416, Day_07 = 322, Day_08 = 569, 
    Day_09 = 456, Day_10 = 490, Day_11 = 489, Day_12 = 381, Day_13 = 264, 
    Day_14 = 519, Day_15 = 476, Day_16 = 470, Day_17 = 570, Day_18 = 582, 
    Day_19 = 341, Day_20 = 321, Day_21 = 355, Day_22 = 521, Day_23 = 516, 
    Day_24 = 491, Day_25 = 533, Day_26 = 377, Day_27 = 363, Day_28 = 509, 
    Day_29 = 514, Day_30 = 460, Day_31 = 527, Day_1_hr_01 = 16, 
    Day_1_hr_02 = 13, Day_1_hr_03 = 15, Day_1_hr_04 = 3, Day_1_hr_05 = 6, 
    Day_1_hr_06 = 4, Day_1_hr_07 = 3, Day_1_hr_08 = 6, Day_1_hr_09 = 5, 
    Day_1_hr_10 = 7, Day_1_hr_11 = 14, Day_1_hr_12 = 16, Day_1_hr_13 = 16, 
    Day_1_hr_14 = 15, Day_1_hr_15 = 15, Day_1_hr_16 = 19, Day_1_hr_17 = 24, 
    Day_1_hr_18 = 24, Day_1_hr_19 = 15, Day_1_hr_20 = 23, Day_1_hr_21 = 11, 
    Day_1_hr_22 = 13, Day_1_hr_23 = 9, Day_1_hr_24 = 7, Day_2_hr_01 = 5, 
    Day_2_hr_02 = 3, Day_2_hr_03 = 4, Day_2_hr_04 = 8, Day_2_hr_05 = 5, 
    Day_2_hr_06 = 2, Day_2_hr_07 = 9, Day_2_hr_08 = 16, Day_2_hr_09 = 9, 
    Day_2_hr_10 = 18, Day_2_hr_11 = 12, Day_2_hr_12 = 13, Day_2_hr_13 = 12, 
    Day_2_hr_14 = 13, Day_2_hr_15 = 8, Day_2_hr_16 = 21, Day_2_hr_17 = 22, 
    Day_2_hr_18 = 39, Day_2_hr_19 = 28, Day_2_hr_20 = 27, Day_2_hr_21 = 16, 
    Day_2_hr_22 = 11, Day_2_hr_23 = 4, Day_2_hr_24 = 6, Day_3_hr_01 = 5, 
    Day_3_hr_02 = 1, Day_3_hr_03 = 9, Day_3_hr_04 = 4, Day_3_hr_05 = 5, 
    Day_3_hr_06 = 3, Day_3_hr_07 = 7, Day_3_hr_08 = 12, Day_3_hr_09 = 10, 
    Day_3_hr_10 = 9, Day_3_hr_11 = 11, Day_3_hr_12 = 12, Day_3_hr_13 = 12, 
    Day_3_hr_14 = 12, Day_3_hr_15 = 16, Day_3_hr_16 = 27, Day_3_hr_17 = 25, 
    Day_3_hr_18 = 35, Day_3_hr_19 = 40, Day_3_hr_20 = 37, Day_3_hr_21 = 19, 
    Day_3_hr_22 = 24, Day_3_hr_23 = 9, Day_3_hr_24 = 7, Day_4_hr_01 = 7, 
    Day_4_hr_02 = 6, Day_4_hr_03 = 3, Day_4_hr_04 = 2, Day_4_hr_05 = 3, 
    Day_4_hr_06 = 6, Day_4_hr_07 = 9, Day_4_hr_08 = 10, Day_4_hr_09 = 8, 
    Day_4_hr_10 = 8, Day_4_hr_11 = 15, Day_4_hr_12 = 21, Day_4_hr_13 = 28, 
    Day_4_hr_14 = 26, Day_4_hr_15 = 20, Day_4_hr_16 = 17, Day_4_hr_17 = 25, 
    Day_4_hr_18 = 55, Day_4_hr_19 = 30, Day_4_hr_20 = 29, Day_4_hr_21 = 17, 
    Day_4_hr_22 = 21, Day_4_hr_23 = 12, Day_4_hr_24 = 6, Day_5_hr_01 = 8, 
    Day_5_hr_02 = 9, Day_5_hr_03 = 8, Day_5_hr_04 = 5, Day_5_hr_05 = 5, 
    Day_5_hr_06 = 5, Day_5_hr_07 = 6, Day_5_hr_08 = 5, Day_5_hr_09 = 9, 
    Day_5_hr_10 = 12, Day_5_hr_11 = 17, Day_5_hr_12 = 24, Day_5_hr_13 = 27, 
    Day_5_hr_14 = 15, Day_5_hr_15 = 33, Day_5_hr_16 = 37, Day_5_hr_17 = 27, 
    Day_5_hr_18 = 20, Day_5_hr_19 = 27, Day_5_hr_20 = 25, Day_5_hr_21 = 18, 
    Day_5_hr_22 = 14, Day_5_hr_23 = 10, Day_5_hr_24 = 10, Day_6_hr_01 = 13, 
    Day_6_hr_02 = 7, Day_6_hr_03 = 11, Day_6_hr_04 = 6, Day_6_hr_05 = 9, 
    Day_6_hr_06 = 6, Day_6_hr_07 = 8, Day_6_hr_08 = 15, Day_6_hr_09 = 11, 
    Day_6_hr_10 = 16, Day_6_hr_11 = 13, Day_6_hr_12 = 11, Day_6_hr_13 = 26, 
    Day_6_hr_14 = 45, Day_6_hr_15 = 24, Day_6_hr_16 = 27, Day_6_hr_17 = 32, 
    Day_6_hr_18 = 25, Day_6_hr_19 = 27, Day_6_hr_20 = 23, Day_6_hr_21 = 17, 
    Day_6_hr_22 = 16, Day_6_hr_23 = 18, Day_6_hr_24 = 10, Day_7_hr_01 = 7, 
    Day_7_hr_02 = 5, Day_7_hr_03 = 5, Day_7_hr_04 = 3, Day_7_hr_05 = 2, 
    Day_7_hr_06 = 3, Day_7_hr_07 = 5, Day_7_hr_08 = 18, Day_7_hr_09 = 13, 
    Day_7_hr_10 = 14, Day_7_hr_11 = 12, Day_7_hr_12 = 15, Day_7_hr_13 = 25, 
    Day_7_hr_14 = 16, Day_7_hr_15 = 21, Day_7_hr_16 = 35, Day_7_hr_17 = 30, 
    Day_7_hr_18 = 39, Day_7_hr_19 = 13, Day_7_hr_20 = 12, Day_7_hr_21 = 6, 
    Day_7_hr_22 = 9, Day_7_hr_23 = 10, Day_7_hr_24 = 4, Day_8_hr_01 = 5, 
    Day_8_hr_02 = 3, Day_8_hr_03 = 19, Day_8_hr_04 = 4, Day_8_hr_05 = 5, 
    Day_8_hr_06 = 5, Day_8_hr_07 = 8, Day_8_hr_08 = 73, Day_8_hr_09 = 56, 
    Day_8_hr_10 = 18, Day_8_hr_11 = 19, Day_8_hr_12 = 14, Day_8_hr_13 = 13, 
    Day_8_hr_14 = 21, Day_8_hr_15 = 29, Day_8_hr_16 = 88, Day_8_hr_17 = 45, 
    Day_8_hr_18 = 34, Day_8_hr_19 = 29, Day_8_hr_20 = 29, Day_8_hr_21 = 20, 
    Day_8_hr_22 = 19, Day_8_hr_23 = 8, Day_8_hr_24 = 5, Day_9_hr_01 = 3, 
    Day_9_hr_02 = 2, Day_9_hr_03 = 0, Day_9_hr_04 = 1, Day_9_hr_05 = 4, 
    Day_9_hr_06 = 7, Day_9_hr_07 = 12, Day_9_hr_08 = 39, Day_9_hr_09 = 44, 
    Day_9_hr_10 = 9, Day_9_hr_11 = 11, Day_9_hr_12 = 13, Day_9_hr_13 = 12, 
    Day_9_hr_14 = 15, Day_9_hr_15 = 15, Day_9_hr_16 = 73, Day_9_hr_17 = 47, 
    Day_9_hr_18 = 48, Day_9_hr_19 = 27, Day_9_hr_20 = 24, Day_9_hr_21 = 24, 
    Day_9_hr_22 = 13, Day_9_hr_23 = 10, Day_9_hr_24 = 3, Day_10_hr_01 = 2, 
    Day_10_hr_02 = 2, Day_10_hr_03 = 2, Day_10_hr_04 = 1, Day_10_hr_05 = 2, 
    Day_10_hr_06 = 3, Day_10_hr_07 = 8, Day_10_hr_08 = 51, Day_10_hr_09 = 36, 
    Day_10_hr_10 = 6, Day_10_hr_11 = 13, Day_10_hr_12 = 17, Day_10_hr_13 = 18, 
    Day_10_hr_14 = 17, Day_10_hr_15 = 19, Day_10_hr_16 = 80, 
    Day_10_hr_17 = 56, Day_10_hr_18 = 57, Day_10_hr_19 = 31, 
    Day_10_hr_20 = 27, Day_10_hr_21 = 21, Day_10_hr_22 = 8, Day_10_hr_23 = 9, 
    Day_10_hr_24 = 4, Day_11_hr_01 = 4, Day_11_hr_02 = 5, Day_11_hr_03 = 2, 
    Day_11_hr_04 = 2, Day_11_hr_05 = 2, Day_11_hr_06 = 1, Day_11_hr_07 = 12, 
    Day_11_hr_08 = 37, Day_11_hr_09 = 38, Day_11_hr_10 = 16, 
    Day_11_hr_11 = 10, Day_11_hr_12 = 15, Day_11_hr_13 = 17, 
    Day_11_hr_14 = 20, Day_11_hr_15 = 28, Day_11_hr_16 = 67, 
    Day_11_hr_17 = 51, Day_11_hr_18 = 47, Day_11_hr_19 = 28, 
    Day_11_hr_20 = 25, Day_11_hr_21 = 27, Day_11_hr_22 = 17, 
    Day_11_hr_23 = 15, Day_11_hr_24 = 3, Day_12_hr_01 = 4, Day_12_hr_02 = 5, 
    Day_12_hr_03 = 2, Day_12_hr_04 = 7, Day_12_hr_05 = 3, Day_12_hr_06 = 1, 
    Day_12_hr_07 = 3, Day_12_hr_08 = 10, Day_12_hr_09 = 9, Day_12_hr_10 = 13, 
    Day_12_hr_11 = 27, Day_12_hr_12 = 20, Day_12_hr_13 = 21, 
    Day_12_hr_14 = 50, Day_12_hr_15 = 28, Day_12_hr_16 = 16, 
    Day_12_hr_17 = 19, Day_12_hr_18 = 24, Day_12_hr_19 = 30, 
    Day_12_hr_20 = 16, Day_12_hr_21 = 24, Day_12_hr_22 = 22, 
    Day_12_hr_23 = 21, Day_12_hr_24 = 6, Day_13_hr_01 = 5, Day_13_hr_02 = 4, 
    Day_13_hr_03 = 2, Day_13_hr_04 = 2, Day_13_hr_05 = 2, Day_13_hr_06 = 1, 
    Day_13_hr_07 = 4, Day_13_hr_08 = 0, Day_13_hr_09 = 7, Day_13_hr_10 = 11, 
    Day_13_hr_11 = 16, Day_13_hr_12 = 13, Day_13_hr_13 = 20, 
    Day_13_hr_14 = 16, Day_13_hr_15 = 24, Day_13_hr_16 = 27, 
    Day_13_hr_17 = 18, Day_13_hr_18 = 22, Day_13_hr_19 = 18, 
    Day_13_hr_20 = 18, Day_13_hr_21 = 15, Day_13_hr_22 = 13, 
    Day_13_hr_23 = 4, Day_13_hr_24 = 2, Day_14_hr_01 = 2, Day_14_hr_02 = 2, 
    Day_14_hr_03 = 0, Day_14_hr_04 = 1, Day_14_hr_05 = 0, Day_14_hr_06 = 3, 
    Day_14_hr_07 = 8, Day_14_hr_08 = 58, Day_14_hr_09 = 66, Day_14_hr_10 = 15, 
    Day_14_hr_11 = 9, Day_14_hr_12 = 12, Day_14_hr_13 = 12, Day_14_hr_14 = 17, 
    Day_14_hr_15 = 25, Day_14_hr_16 = 72, Day_14_hr_17 = 41, 
    Day_14_hr_18 = 57, Day_14_hr_19 = 36, Day_14_hr_20 = 23, 
    Day_14_hr_21 = 27, Day_14_hr_22 = 23, Day_14_hr_23 = 5, Day_14_hr_24 = 5, 
    Day_15_hr_01 = 5, Day_15_hr_02 = 4, Day_15_hr_03 = 3, Day_15_hr_04 = 0, 
    Day_15_hr_05 = 3, Day_15_hr_06 = 2, Day_15_hr_07 = 4, Day_15_hr_08 = 45, 
    Day_15_hr_09 = 43, Day_15_hr_10 = 12, Day_15_hr_11 = 7, Day_15_hr_12 = 19, 
    Day_15_hr_13 = 12, Day_15_hr_14 = 11, Day_15_hr_15 = 21, 
    Day_15_hr_16 = 80, Day_15_hr_17 = 46, Day_15_hr_18 = 55, 
    Day_15_hr_19 = 26, Day_15_hr_20 = 20, Day_15_hr_21 = 26, 
    Day_15_hr_22 = 14, Day_15_hr_23 = 11, Day_15_hr_24 = 7, Day_16_hr_01 = 3, 
    Day_16_hr_02 = 1, Day_16_hr_03 = 1, Day_16_hr_04 = 1, Day_16_hr_05 = 1, 
    Day_16_hr_06 = 5, Day_16_hr_07 = 6, Day_16_hr_08 = 41, Day_16_hr_09 = 58, 
    Day_16_hr_10 = 10, Day_16_hr_11 = 12, Day_16_hr_12 = 15, 
    Day_16_hr_13 = 15, Day_16_hr_14 = 12, Day_16_hr_15 = 20, 
    Day_16_hr_16 = 84, Day_16_hr_17 = 51, Day_16_hr_18 = 41, 
    Day_16_hr_19 = 27, Day_16_hr_20 = 15, Day_16_hr_21 = 24, 
    Day_16_hr_22 = 16, Day_16_hr_23 = 5, Day_16_hr_24 = 6, Day_17_hr_01 = 2, 
    Day_17_hr_02 = 1, Day_17_hr_03 = 4, Day_17_hr_04 = 2, Day_17_hr_05 = 3, 
    Day_17_hr_06 = 3, Day_17_hr_07 = 9, Day_17_hr_08 = 62, Day_17_hr_09 = 47, 
    Day_17_hr_10 = 13, Day_17_hr_11 = 15, Day_17_hr_12 = 14, 
    Day_17_hr_13 = 13, Day_17_hr_14 = 29, Day_17_hr_15 = 24, 
    Day_17_hr_16 = 70, Day_17_hr_17 = 56, Day_17_hr_18 = 53, 
    Day_17_hr_19 = 51, Day_17_hr_20 = 29, Day_17_hr_21 = 23, 
    Day_17_hr_22 = 23, Day_17_hr_23 = 14, Day_17_hr_24 = 10, 
    Day_18_hr_01 = 6, Day_18_hr_02 = 7, Day_18_hr_03 = 8, Day_18_hr_04 = 4, 
    Day_18_hr_05 = 6, Day_18_hr_06 = 5, Day_18_hr_07 = 15, Day_18_hr_08 = 46, 
    Day_18_hr_09 = 44, Day_18_hr_10 = 10, Day_18_hr_11 = 13, 
    Day_18_hr_12 = 20, Day_18_hr_13 = 22, Day_18_hr_14 = 19, 
    Day_18_hr_15 = 31, Day_18_hr_16 = 79, Day_18_hr_17 = 55, 
    Day_18_hr_18 = 55, Day_18_hr_19 = 38, Day_18_hr_20 = 36, 
    Day_18_hr_21 = 20, Day_18_hr_22 = 21, Day_18_hr_23 = 14, 
    Day_18_hr_24 = 8, Day_19_hr_01 = 7, Day_19_hr_02 = 8, Day_19_hr_03 = 3, 
    Day_19_hr_04 = 7, Day_19_hr_05 = 5, Day_19_hr_06 = 4, Day_19_hr_07 = 1, 
    Day_19_hr_08 = 5, Day_19_hr_09 = 13, Day_19_hr_10 = 20, Day_19_hr_11 = 17, 
    Day_19_hr_12 = 17, Day_19_hr_13 = 20, Day_19_hr_14 = 20, 
    Day_19_hr_15 = 21, Day_19_hr_16 = 32, Day_19_hr_17 = 37, 
    Day_19_hr_18 = 22, Day_19_hr_19 = 14, Day_19_hr_20 = 18, 
    Day_19_hr_21 = 17, Day_19_hr_22 = 17, Day_19_hr_23 = 8, Day_19_hr_24 = 8, 
    Day_20_hr_01 = 3, Day_20_hr_02 = 7, Day_20_hr_03 = 7, Day_20_hr_04 = 4, 
    Day_20_hr_05 = 6, Day_20_hr_06 = 2, Day_20_hr_07 = 2, Day_20_hr_08 = 5, 
    Day_20_hr_09 = 12, Day_20_hr_10 = 14, Day_20_hr_11 = 14, 
    Day_20_hr_12 = 7, Day_20_hr_13 = 30, Day_20_hr_14 = 30, Day_20_hr_15 = 32, 
    Day_20_hr_16 = 27, Day_20_hr_17 = 25, Day_20_hr_18 = 21, 
    Day_20_hr_19 = 21, Day_20_hr_20 = 18, Day_20_hr_21 = 6, Day_20_hr_22 = 14, 
    Day_20_hr_23 = 8, Day_20_hr_24 = 6, Day_21_hr_01 = 8, Day_21_hr_02 = 3, 
    Day_21_hr_03 = 1, Day_21_hr_04 = 0, Day_21_hr_05 = 1, Day_21_hr_06 = 2, 
    Day_21_hr_07 = 0, Day_21_hr_08 = 7, Day_21_hr_09 = 4, Day_21_hr_10 = 19, 
    Day_21_hr_11 = 16, Day_21_hr_12 = 19, Day_21_hr_13 = 26, 
    Day_21_hr_14 = 33, Day_21_hr_15 = 30, Day_21_hr_16 = 31, 
    Day_21_hr_17 = 27, Day_21_hr_18 = 32, Day_21_hr_19 = 28, 
    Day_21_hr_20 = 19, Day_21_hr_21 = 19, Day_21_hr_22 = 14, 
    Day_21_hr_23 = 10, Day_21_hr_24 = 6, Day_22_hr_01 = 7, Day_22_hr_02 = 2, 
    Day_22_hr_03 = 3, Day_22_hr_04 = 2, Day_22_hr_05 = 1, Day_22_hr_06 = 3, 
    Day_22_hr_07 = 8, Day_22_hr_08 = 53, Day_22_hr_09 = 53, Day_22_hr_10 = 16, 
    Day_22_hr_11 = 15, Day_22_hr_12 = 15, Day_22_hr_13 = 10, 
    Day_22_hr_14 = 23, Day_22_hr_15 = 32, Day_22_hr_16 = 64, 
    Day_22_hr_17 = 48, Day_22_hr_18 = 53, Day_22_hr_19 = 34, 
    Day_22_hr_20 = 28, Day_22_hr_21 = 19, Day_22_hr_22 = 16, 
    Day_22_hr_23 = 11, Day_22_hr_24 = 5, Day_23_hr_01 = 2, Day_23_hr_02 = 4, 
    Day_23_hr_03 = 7, Day_23_hr_04 = 0, Day_23_hr_05 = 2, Day_23_hr_06 = 4, 
    Day_23_hr_07 = 7, Day_23_hr_08 = 62, Day_23_hr_09 = 40, Day_23_hr_10 = 11, 
    Day_23_hr_11 = 10, Day_23_hr_12 = 13, Day_23_hr_13 = 19, 
    Day_23_hr_14 = 26, Day_23_hr_15 = 28, Day_23_hr_16 = 70, 
    Day_23_hr_17 = 41, Day_23_hr_18 = 54, Day_23_hr_19 = 35, 
    Day_23_hr_20 = 31, Day_23_hr_21 = 21, Day_23_hr_22 = 14, 
    Day_23_hr_23 = 13, Day_23_hr_24 = 2, Day_24_hr_01 = 2, Day_24_hr_02 = 2, 
    Day_24_hr_03 = 3, Day_24_hr_04 = 1, Day_24_hr_05 = 2, Day_24_hr_06 = 4, 
    Day_24_hr_07 = 10, Day_24_hr_08 = 52, Day_24_hr_09 = 39, 
    Day_24_hr_10 = 13, Day_24_hr_11 = 18, Day_24_hr_12 = 11, 
    Day_24_hr_13 = 14, Day_24_hr_14 = 12, Day_24_hr_15 = 25, 
    Day_24_hr_16 = 58, Day_24_hr_17 = 42, Day_24_hr_18 = 65, 
    Day_24_hr_19 = 48, Day_24_hr_20 = 21, Day_24_hr_21 = 23, 
    Day_24_hr_22 = 11, Day_24_hr_23 = 8, Day_24_hr_24 = 7, Day_25_hr_01 = 4, 
    Day_25_hr_02 = 3, Day_25_hr_03 = 4, Day_25_hr_04 = 3, Day_25_hr_05 = 4, 
    Day_25_hr_06 = 2, Day_25_hr_07 = 4, Day_25_hr_08 = 44, Day_25_hr_09 = 52, 
    Day_25_hr_10 = 13, Day_25_hr_11 = 15, Day_25_hr_12 = 12, 
    Day_25_hr_13 = 31, Day_25_hr_14 = 16, Day_25_hr_15 = 35, 
    Day_25_hr_16 = 81, Day_25_hr_17 = 47, Day_25_hr_18 = 42, 
    Day_25_hr_19 = 26, Day_25_hr_20 = 27, Day_25_hr_21 = 35, 
    Day_25_hr_22 = 11, Day_25_hr_23 = 16, Day_25_hr_24 = 6, Day_26_hr_01 = 7, 
    Day_26_hr_02 = 7, Day_26_hr_03 = 3, Day_26_hr_04 = 6, Day_26_hr_05 = 5, 
    Day_26_hr_06 = 7, Day_26_hr_07 = 9, Day_26_hr_08 = 7, Day_26_hr_09 = 9, 
    Day_26_hr_10 = 17, Day_26_hr_11 = 26, Day_26_hr_12 = 23, 
    Day_26_hr_13 = 18, Day_26_hr_14 = 23, Day_26_hr_15 = 24, 
    Day_26_hr_16 = 32, Day_26_hr_17 = 25, Day_26_hr_18 = 24, 
    Day_26_hr_19 = 22, Day_26_hr_20 = 23, Day_26_hr_21 = 14, 
    Day_26_hr_22 = 16, Day_26_hr_23 = 17, Day_26_hr_24 = 13, 
    Day_27_hr_01 = 10, Day_27_hr_02 = 10, Day_27_hr_03 = 8, Day_27_hr_04 = 7, 
    Day_27_hr_05 = 5, Day_27_hr_06 = 5, Day_27_hr_07 = 10, Day_27_hr_08 = 10, 
    Day_27_hr_09 = 11, Day_27_hr_10 = 8, Day_27_hr_11 = 12, Day_27_hr_12 = 19, 
    Day_27_hr_13 = 33, Day_27_hr_14 = 28, Day_27_hr_15 = 21, 
    Day_27_hr_16 = 34, Day_27_hr_17 = 24, Day_27_hr_18 = 31, 
    Day_27_hr_19 = 23, Day_27_hr_20 = 17, Day_27_hr_21 = 12, 
    Day_27_hr_22 = 12, Day_27_hr_23 = 7, Day_27_hr_24 = 6, Day_28_hr_01 = 6, 
    Day_28_hr_02 = 5, Day_28_hr_03 = 0, Day_28_hr_04 = 1, Day_28_hr_05 = 9, 
    Day_28_hr_06 = 2, Day_28_hr_07 = 5, Day_28_hr_08 = 48, Day_28_hr_09 = 44, 
    Day_28_hr_10 = 12, Day_28_hr_11 = 11, Day_28_hr_12 = 18, 
    Day_28_hr_13 = 13, Day_28_hr_14 = 22, Day_28_hr_15 = 36, 
    Day_28_hr_16 = 70, Day_28_hr_17 = 45, Day_28_hr_18 = 48, 
    Day_28_hr_19 = 33, Day_28_hr_20 = 28, Day_28_hr_21 = 17, 
    Day_28_hr_22 = 20, Day_28_hr_23 = 9, Day_28_hr_24 = 7, Day_29_hr_01 = 4, 
    Day_29_hr_02 = 3, Day_29_hr_03 = 2, Day_29_hr_04 = 2, Day_29_hr_05 = 2, 
    Day_29_hr_06 = 3, Day_29_hr_07 = 7, Day_29_hr_08 = 61, Day_29_hr_09 = 27, 
    Day_29_hr_10 = 9, Day_29_hr_11 = 14, Day_29_hr_12 = 14, Day_29_hr_13 = 15, 
    Day_29_hr_14 = 34, Day_29_hr_15 = 38, Day_29_hr_16 = 73, 
    Day_29_hr_17 = 45, Day_29_hr_18 = 52, Day_29_hr_19 = 33, 
    Day_29_hr_20 = 27, Day_29_hr_21 = 17, Day_29_hr_22 = 23, 
    Day_29_hr_23 = 3, Day_29_hr_24 = 6, Day_30_hr_01 = 3, Day_30_hr_02 = 0, 
    Day_30_hr_03 = 0, Day_30_hr_04 = 4, Day_30_hr_05 = 0, Day_30_hr_06 = 1, 
    Day_30_hr_07 = 4, Day_30_hr_08 = 49, Day_30_hr_09 = 48, Day_30_hr_10 = 14, 
    Day_30_hr_11 = 10, Day_30_hr_12 = 16, Day_30_hr_13 = 14, 
    Day_30_hr_14 = 12, Day_30_hr_15 = 20, Day_30_hr_16 = 61, 
    Day_30_hr_17 = 40, Day_30_hr_18 = 43, Day_30_hr_19 = 35, 
    Day_30_hr_20 = 28, Day_30_hr_21 = 22, Day_30_hr_22 = 20, 
    Day_30_hr_23 = 7, Day_30_hr_24 = 9, Day_31_hr_01 = 9, Day_31_hr_02 = 7, 
    Day_31_hr_03 = 8, Day_31_hr_04 = 10, Day_31_hr_05 = 8, Day_31_hr_06 = 11, 
    Day_31_hr_07 = 7, Day_31_hr_08 = 54, Day_31_hr_09 = 40, Day_31_hr_10 = 12, 
    Day_31_hr_11 = 11, Day_31_hr_12 = 16, Day_31_hr_13 = 15, 
    Day_31_hr_14 = 20, Day_31_hr_15 = 22, Day_31_hr_16 = 80, 
    Day_31_hr_17 = 44, Day_31_hr_18 = 41, Day_31_hr_19 = 30, 
    Day_31_hr_20 = 17, Day_31_hr_21 = 20, Day_31_hr_22 = 27, 
    Day_31_hr_23 = 7, Day_31_hr_24 = 11), row.names = c(NA, -1L
), class = c("tbl_df", "tbl", "data.frame"))
r dplyr tidyverse
1个回答
0
投票

以宽格式输出还好,难的是以宽格式进行分析。如果您可以将数据(最好是上游数据)转换为更长的格式,您的问题会更简单。如果是长格式,您只需使用

df |> mutate(ratio = hr_val / day_val)

如果您只有宽格式的数据,并且需要输出为宽格式,我认为重新整形长,进行计算,然后再次重新整形宽还是更简单。

重塑长:

library(tidyverse)
df_long <- df |>
  pivot_longer(-(AREA:RAW_DEVICE_COUNTS))

分别提取天数数据和小时数据:(这里,我还转换了天数(例如

Day_1
1
),这样它会更容易与像
Day_01_hr_01
这样的列匹配,它具有不同的格式
1
/
01
日期标签。

df_days <- df_long |>
  filter(str_length(name) <= 6) |>
  rename(day = name, day_val = value) |>
  mutate(across(day, parse_number))

df_hours <- df_long |>
  filter(str_length(name) > 6) |>
  separate(name, into = c("day", "hour"), sep = "(?<=[0-9])_") |>
  mutate(across(day:hour, parse_number)) |>
  rename(hr_val = value)

然后将两者结合并计算比率:

df_hours |>
  left_join(df_days) |>
  mutate(ratio = hr_val / day_val)

我不清楚所需的输出格式是什么,但我认为使用

pivot_wider
的一些变体就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.