# Load required libraries
library(tidyr)
library(dplyr)
##
## 载入程序包:'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Stage 1: Create the initial data frame
data <- data.frame(
drug1 = c(rep("Briciclib", 9), rep("DrugX", 6), rep("DrugA", 3)), # 9 = 3×3, 6 = 3×2, 3 = 3×1
drug2 = c(rep("Bortezomib", 9), rep("DrugY", 6), rep("DrugB", 3)),
conc1 = c(3, 2, 1, 3, 2, 1, 3, 2, 1, # First pair: 3, 2, 1 (3 reps)
3, 2, 1, 3, 2, 1, # Second pair: 3, 2, 1 (2 reps)
3, 2, 1), # Third pair: 3, 2, 1 (1 rep)
conc2 = c(3, 2, 1, 3, 2, 1, 3, 2, 1, # First pair: 3, 2, 1 (3 reps)
3, 2, 1, 3, 2, 1, # Second pair: 3, 2, 1 (2 reps)
3, 2, 1), # Third pair: 3, 2, 1 (1 rep)
response = c(33, 44, 55, # First pair (from original data)
333, 444, 555,
3333, 4444, 5555,
88, 99, 110, # Second pair (example values)
888, 999, 1110,
77, 88, 99) # Third pair (example values)
)
print("Stage 1: Initial data frame")
## [1] "Stage 1: Initial data frame"
print(data)
## drug1 drug2 conc1 conc2 response
## 1 Briciclib Bortezomib 3 3 33
## 2 Briciclib Bortezomib 2 2 44
## 3 Briciclib Bortezomib 1 1 55
## 4 Briciclib Bortezomib 3 3 333
## 5 Briciclib Bortezomib 2 2 444
## 6 Briciclib Bortezomib 1 1 555
## 7 Briciclib Bortezomib 3 3 3333
## 8 Briciclib Bortezomib 2 2 4444
## 9 Briciclib Bortezomib 1 1 5555
## 10 DrugX DrugY 3 3 88
## 11 DrugX DrugY 2 2 99
## 12 DrugX DrugY 1 1 110
## 13 DrugX DrugY 3 3 888
## 14 DrugX DrugY 2 2 999
## 15 DrugX DrugY 1 1 1110
## 16 DrugA DrugB 3 3 77
## 17 DrugA DrugB 2 2 88
## 18 DrugA DrugB 1 1 99
# Stage 2: Add replicate identifier
data <- data %>%
group_by(drug1, drug2, conc1, conc2) %>%
mutate(replicate = row_number()) %>%
ungroup()
print("Stage 2: Data with replicate identifier")
## [1] "Stage 2: Data with replicate identifier"
print(data)
## # A tibble: 18 x 6
## drug1 drug2 conc1 conc2 response replicate
## <chr> <chr> <dbl> <dbl> <dbl> <int>
## 1 Briciclib Bortezomib 3 3 33 1
## 2 Briciclib Bortezomib 2 2 44 1
## 3 Briciclib Bortezomib 1 1 55 1
## 4 Briciclib Bortezomib 3 3 333 2
## 5 Briciclib Bortezomib 2 2 444 2
## 6 Briciclib Bortezomib 1 1 555 2
## 7 Briciclib Bortezomib 3 3 3333 3
## 8 Briciclib Bortezomib 2 2 4444 3
## 9 Briciclib Bortezomib 1 1 5555 3
## 10 DrugX DrugY 3 3 88 1
## 11 DrugX DrugY 2 2 99 1
## 12 DrugX DrugY 1 1 110 1
## 13 DrugX DrugY 3 3 888 2
## 14 DrugX DrugY 2 2 999 2
## 15 DrugX DrugY 1 1 1110 2
## 16 DrugA DrugB 3 3 77 1
## 17 DrugA DrugB 2 2 88 1
## 18 DrugA DrugB 1 1 99 1
# Stage 3: Pivot to wide format
data_wide <- data %>%
pivot_wider(
names_from = replicate,
values_from = response,
names_prefix = "response"
)
print("Stage 3: Pivoted wide format")
## [1] "Stage 3: Pivoted wide format"
print(data_wide)
## # A tibble: 9 x 7
## drug1 drug2 conc1 conc2 response1 response2 response3
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Briciclib Bortezomib 3 3 33 333 3333
## 2 Briciclib Bortezomib 2 2 44 444 4444
## 3 Briciclib Bortezomib 1 1 55 555 5555
## 4 DrugX DrugY 3 3 88 888 NA
## 5 DrugX DrugY 2 2 99 999 NA
## 6 DrugX DrugY 1 1 110 1110 NA
## 7 DrugA DrugB 3 3 77 NA NA
## 8 DrugA DrugB 2 2 88 NA NA
## 9 DrugA DrugB 1 1 99 NA NA
# Stage 4: Adjust column order
data_wide <- data_wide %>%
select(drug1, drug2, conc1, conc2, response1, response2, response3)
print("Stage 4: Final result with adjusted columns")
## [1] "Stage 4: Final result with adjusted columns"
print(data_wide)
## # A tibble: 9 x 7
## drug1 drug2 conc1 conc2 response1 response2 response3
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Briciclib Bortezomib 3 3 33 333 3333
## 2 Briciclib Bortezomib 2 2 44 444 4444
## 3 Briciclib Bortezomib 1 1 55 555 5555
## 4 DrugX DrugY 3 3 88 888 NA
## 5 DrugX DrugY 2 2 99 999 NA
## 6 DrugX DrugY 1 1 110 1110 NA
## 7 DrugA DrugB 3 3 77 NA NA
## 8 DrugA DrugB 2 2 88 NA NA
## 9 DrugA DrugB 1 1 99 NA NA
##########################################################################
# Load required libraries
library(tidyr)
library(dplyr)
# Starting point: Assume this is the data_wide from the previous step
data_wide <- data.frame(
drug1 = c(rep("Briciclib", 3), rep("Paclitaxel", 3), rep("Doxorubicin", 3)),
drug2 = c(rep("Bortezomib", 3), rep("Cisplatin", 3), rep("Gemcitabine", 3)),
conc1 = c(3, 2, 1, 3, 2, 1, 3, 2, 1),
conc2 = c(3, 2, 1, 3, 2, 1, 3, 2, 1),
response1 = c(12.5, 18.3, 25.7, 15.8, 22.4, 29.6, 10.2, 14.5, 19.8),
response2 = c(45.2, 58.9, 67.4, 48.7, 55.3, 62.1, NA, NA, NA),
response3 = c(89.1, 95.6, 102.3, NA, NA, NA, NA, NA, NA)
)
print("Starting point: data_wide")
## [1] "Starting point: data_wide"
print(data_wide)
## drug1 drug2 conc1 conc2 response1 response2 response3
## 1 Briciclib Bortezomib 3 3 12.5 45.2 89.1
## 2 Briciclib Bortezomib 2 2 18.3 58.9 95.6
## 3 Briciclib Bortezomib 1 1 25.7 67.4 102.3
## 4 Paclitaxel Cisplatin 3 3 15.8 48.7 NA
## 5 Paclitaxel Cisplatin 2 2 22.4 55.3 NA
## 6 Paclitaxel Cisplatin 1 1 29.6 62.1 NA
## 7 Doxorubicin Gemcitabine 3 3 10.2 NA NA
## 8 Doxorubicin Gemcitabine 2 2 14.5 NA NA
## 9 Doxorubicin Gemcitabine 1 1 19.8 NA NA
# Stage 1: Pivot from wide to long format
data_long <- data_wide %>%
pivot_longer(
cols = starts_with("response"), # Select all response columns
names_to = "replicate", # Column name for replicate identifiers
values_to = "response", # Column name for response values
values_drop_na = TRUE # Drop rows where response is NA
) %>%
mutate(replicate = as.integer(sub("response", "", replicate))) # Convert "response1" to 1, etc.
print("Stage 1: Pivoted to long format")
## [1] "Stage 1: Pivoted to long format"
print(data_long)
## # A tibble: 18 x 6
## drug1 drug2 conc1 conc2 replicate response
## <chr> <chr> <dbl> <dbl> <int> <dbl>
## 1 Briciclib Bortezomib 3 3 1 12.5
## 2 Briciclib Bortezomib 3 3 2 45.2
## 3 Briciclib Bortezomib 3 3 3 89.1
## 4 Briciclib Bortezomib 2 2 1 18.3
## 5 Briciclib Bortezomib 2 2 2 58.9
## 6 Briciclib Bortezomib 2 2 3 95.6
## 7 Briciclib Bortezomib 1 1 1 25.7
## 8 Briciclib Bortezomib 1 1 2 67.4
## 9 Briciclib Bortezomib 1 1 3 102.
## 10 Paclitaxel Cisplatin 3 3 1 15.8
## 11 Paclitaxel Cisplatin 3 3 2 48.7
## 12 Paclitaxel Cisplatin 2 2 1 22.4
## 13 Paclitaxel Cisplatin 2 2 2 55.3
## 14 Paclitaxel Cisplatin 1 1 1 29.6
## 15 Paclitaxel Cisplatin 1 1 2 62.1
## 16 Doxorubicin Gemcitabine 3 3 1 10.2
## 17 Doxorubicin Gemcitabine 2 2 1 14.5
## 18 Doxorubicin Gemcitabine 1 1 1 19.8
# Stage 2: Remove replicate column to match original format (optional)
data_final <- data_long %>%
select(drug1, drug2, conc1, conc2, response)
print("Stage 2: Final long format (matching original structure)")
## [1] "Stage 2: Final long format (matching original structure)"
print(data_final)
## # A tibble: 18 x 5
## drug1 drug2 conc1 conc2 response
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 Briciclib Bortezomib 3 3 12.5
## 2 Briciclib Bortezomib 3 3 45.2
## 3 Briciclib Bortezomib 3 3 89.1
## 4 Briciclib Bortezomib 2 2 18.3
## 5 Briciclib Bortezomib 2 2 58.9
## 6 Briciclib Bortezomib 2 2 95.6
## 7 Briciclib Bortezomib 1 1 25.7
## 8 Briciclib Bortezomib 1 1 67.4
## 9 Briciclib Bortezomib 1 1 102.
## 10 Paclitaxel Cisplatin 3 3 15.8
## 11 Paclitaxel Cisplatin 3 3 48.7
## 12 Paclitaxel Cisplatin 2 2 22.4
## 13 Paclitaxel Cisplatin 2 2 55.3
## 14 Paclitaxel Cisplatin 1 1 29.6
## 15 Paclitaxel Cisplatin 1 1 62.1
## 16 Doxorubicin Gemcitabine 3 3 10.2
## 17 Doxorubicin Gemcitabine 2 2 14.5
## 18 Doxorubicin Gemcitabine 1 1 19.8