94 lines
5.3 KiB
R
94 lines
5.3 KiB
R
# Script to combine and recode Likert scale items in eohi2.csv
|
|
# Combines 01 and 02 versions of items, then recodes text to numeric values
|
|
|
|
# Load necessary library
|
|
library(dplyr)
|
|
|
|
# Read the data
|
|
df <- read.csv("eohi2/eohi2.csv", stringsAsFactors = FALSE)
|
|
|
|
# Define the mapping function
|
|
recode_likert <- function(x) {
|
|
case_when(
|
|
tolower(x) == "strongly disagree" ~ -3,
|
|
tolower(x) == "disagree" ~ -2,
|
|
tolower(x) == "somewhat disagree" ~ -1,
|
|
tolower(x) == "neither agree nor disagree" ~ 0,
|
|
tolower(x) == "somewhat agree" ~ 1,
|
|
tolower(x) == "agree" ~ 2,
|
|
tolower(x) == "strongly agree" ~ 3,
|
|
TRUE ~ NA_real_
|
|
)
|
|
}
|
|
|
|
# Define source column pairs (Set A and Set B)
|
|
source_cols_A <- c(
|
|
"01past5PrefItem_1", "01past5PrefItem_2", "01past5PrefItem_3", "01past5PrefItem_4", "01past5PrefItem_5",
|
|
"01past5PersItem_1", "01past5PersItem_2", "01past5PersItem_3", "01past5PersItem_4", "01past5PersItem_5",
|
|
"01past5ValItem_1", "01past5ValItem_2", "01past5ValItem_3", "01past5ValItem_4", "01past5ValItem_5",
|
|
"01past10PrefItem_1", "01past10PrefItem_2", "01past10PrefItem_3", "01past10PrefItem_4", "01past10PrefItem_5",
|
|
"01past10PersItem_1", "01past10PersItem_2", "01past10PersItem_3", "01past10PersItem_4", "01past10PersItem_5",
|
|
"01past10ValItem_1", "01past10ValItem_2", "01past10ValItem_3", "01past10ValItem_4", "01past10ValItem_5",
|
|
"01fut5PrefItem_1", "01fut5PrefItem_2", "01fut5PrefItem_3", "01fut5PrefItem_4", "01fut5PrefItem_5",
|
|
"01fut5PersItem_1", "01fut5PersItem_2", "01fut5PersItem_3", "01fut5PersItem_4", "01fut5PersItem_5",
|
|
"01fut5ValItem_1", "01fut5ValItem_2", "01fut5ValItem_3", "01fut5ValItem_4", "01fut5ValItem_5",
|
|
"01fut10PrefItem_1", "01fut10PrefItem_2", "01fut10PrefItem_3", "01fut10PrefItem_4", "01fut10PrefItem_5",
|
|
"01fut10PersItem_1", "01fut10PersItem_2", "01fut10PersItem_3", "01fut10PersItem_4", "01fut10PersItem_5",
|
|
"01fut10ValItem_1", "01fut10ValItem_2", "01fut10ValItem_3", "01fut10ValItem_4", "01fut10ValItem_5"
|
|
)
|
|
|
|
source_cols_B <- c(
|
|
"02past5PrefItem_1", "02past5PrefItem_2", "02past5PrefItem_3", "02past5PrefItem_4", "02past5PrefItem_5",
|
|
"02past5PersItem_1", "02past5PersItem_2", "02past5PersItem_3", "02past5PersItem_4", "02past5PersItem_5",
|
|
"02past5ValItem_1", "02past5ValItem_2", "02past5ValItem_3", "02past5ValItem_4", "02past5ValItem_5",
|
|
"02past10PrefItem_1", "02past10PrefItem_2", "02past10PrefItem_3", "02past10PrefItem_4", "02past10PrefItem_5",
|
|
"02past10PersItem_1", "02past10PersItem_2", "02past10PersItem_3", "02past10PersItem_4", "02past10PersItem_5",
|
|
"02past10ValItem_1", "02past10ValItem_2", "02past10ValItem_3", "02past10ValItem_4", "02past10ValItem_5",
|
|
"02fut5PrefItem_1", "02fut5PrefItem_2", "02fut5PrefItem_3", "02fut5PrefItem_4", "02fut5PrefItem_5",
|
|
"02fut5PersItem_1", "02fut5PersItem_2", "02fut5PersItem_3", "02fut5PersItem_4", "02fut5PersItem_5",
|
|
"02fut5ValItem_1", "02fut5ValItem_2", "02fut5ValItem_3", "02fut5ValItem_4", "02fut5ValItem_5",
|
|
"02fut10PrefItem_1", "02fut10PrefItem_2", "02fut10PrefItem_3", "02fut10PrefItem_4", "02fut10PrefItem_5",
|
|
"02fut10PersItem_1", "02fut10PersItem_2", "02fut10PersItem_3", "02fut10PersItem_4", "02fut10PersItem_5",
|
|
"02fut10ValItem_1", "02fut10ValItem_2", "02fut10ValItem_3", "02fut10ValItem_4", "02fut10ValItem_5"
|
|
)
|
|
|
|
# Define target column names
|
|
target_cols <- c(
|
|
"past_5_pref_read", "past_5_pref_music", "past_5_pref_TV", "past_5_pref_nap", "past_5_pref_travel",
|
|
"past_5_pers_extravert", "past_5_pers_critical", "past_5_pers_dependable", "past_5_pers_anxious", "past_5_pers_complex",
|
|
"past_5_val_obey", "past_5_val_trad", "past_5_val_opinion", "past_5_val_performance", "past_5_val_justice",
|
|
"past_10_pref_read", "past_10_pref_music", "past_10_pref_TV", "past_10_pref_nap", "past_10_pref_travel",
|
|
"past_10_pers_extravert", "past_10_pers_critical", "past_10_pers_dependable", "past_10_pers_anxious", "past_10_pers_complex",
|
|
"past_10_val_obey", "past_10_val_trad", "past_10_val_opinion", "past_10_val_performance", "past_10_val_justice",
|
|
"fut_5_pref_read", "fut_5_pref_music", "fut_5_pref_TV", "fut_5_pref_nap", "fut_5_pref_travel",
|
|
"fut_5_pers_extravert", "fut_5_pers_critical", "fut_5_pers_dependable", "fut_5_pers_anxious", "fut_5_pers_complex",
|
|
"fut_5_val_obey", "fut_5_val_trad", "fut_5_val_opinion", "fut_5_val_performance", "fut_5_val_justice",
|
|
"fut_10_pref_read", "fut_10_pref_music", "fut_10_pref_TV", "fut_10_pref_nap", "fut_10_pref_travel",
|
|
"fut_10_pers_extravert", "fut_10_pers_critical", "fut_10_pers_dependable", "fut_10_pers_anxious", "fut_10_pers_complex",
|
|
"fut_10_val_obey", "fut_10_val_trad", "fut_10_val_opinion", "fut_10_val_performance", "fut_10_val_justice"
|
|
)
|
|
|
|
# Process each pair of columns
|
|
for (i in 1:60) {
|
|
col_A <- source_cols_A[i]
|
|
col_B <- source_cols_B[i]
|
|
target_col <- target_cols[i]
|
|
|
|
# Coalesce: take value from col_A if present, otherwise from col_B
|
|
combined <- ifelse(!is.na(df[[col_A]]) & df[[col_A]] != "",
|
|
df[[col_A]],
|
|
df[[col_B]])
|
|
|
|
# Recode to numeric
|
|
df[[target_col]] <- recode_likert(combined)
|
|
|
|
# Print progress
|
|
cat("Processed:", target_col, "\n")
|
|
}
|
|
|
|
# Save the modified dataframe back to CSV
|
|
write.csv(df, "eohi2/eohi2.csv", row.names = FALSE)
|
|
|
|
cat("\nProcessing complete! 60 new columns added to eohi2/eohi2.csv\n")
|
|
|