Как перекодировать и создать несколько переменных из разных форматированных наборов данных? - PullRequest
0 голосов
/ 01 октября 2019

Я работаю с двумя различными наборами данных опроса, проведенными в США (us_data) и в Украине (ukr_data). В наборе данных есть респонденты, оценивающие свою реакцию на различные действия, которые могут предпринять политики (помеченные как Действие 1 и Действие 2 в рабочем примере ниже). Респонденты оценивали каждое действие по четырем измерениям:

   1) How acceptable they view the action? 
   2) How violent they think the action is?
   3) How threatened they feel by the action?
   4) How disgusted they feel by the action?

Измерения 1-4 повторялись по нескольким действиям. Вопросы, задаваемые в обоих опросах, одинаковы, но наборы данных представлены в другом формате. Украинский набор данных представлен в длинном формате с переменной маркировкой, оценивают ли респонденты Действие 1 или Действие 2. В отличие от этого, набор данных США находится в широком формате, с различными вопросами для каждого действия в каждом из четырех измерений.

Я хотел бы иметь возможность создавать новые переменные и перекодировать переменные в одну большую функцию и возвращать средства каждой оценки (приемлемой, насильственной, угрожающей и противной) для каждого действия (Действие 1 иДействие 2 в примере) для каждой страны (США и Украина), а также альфа Кронбаха для каждых четырех оценок для каждого действия по стране. Поскольку в фактическом наборе данных содержится более 40 действий, было бы гораздо предпочтительнее сделать это как часть цикла.

Как новичок в R, у меня возникли некоторые проблемы, поскольку форматирование наборов данных отличается, и я не совсем уверен, как перекодировать переменные по массе.

Ниже я предоставилминимальный рабочий пример двух наборов данных. Я могу заставить этот кусок кода работать и перекодировать приемлемость действия 1 и его значение как в США, так и на Украине. Но я хочу быть в состоянии выполнить цикл, который делает это для каждого каждого действия (40+), всех 4 оценок и в каждой стране.

> library(dplyr)
> library(psych)
> 
> ##Clear the Workspace
> rm(list = ls())
> 
> 
> ##Setting Up the Ukraine data###
> 
> ##Which Action is being addressed
> ukr_actlabels<-c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2)
> 
> ###Attitudes Towards Actions
> ukr_acceptable<-c(1,6, 2,1, 3,1, 4, 1, 2, 5)
> ukr_violent<-c(2,1, 2,1, 3,1, 4, 7, 2, 3)
> ukr_threat<- c(1,1, 1,1, 3,1, 4, 1, 2, 3)
> ukr_disgusting<- c(1,3, 6,1, 3,1, 3, 1, 2, 4)
> 
> ukr_data<-data.frame(cbind(ukr_actlabels,ukr_acceptable, ukr_violent,          ukr_threat, ukr_disgusting  ))
    > ukr_data
   ukr_actlabels ukr_acceptable ukr_violent ukr_threat ukr_disgusting
1              1              1           2          1              1
2              1              6           1          1              3
3              1              2           2          1              6
4              1              1           1          1              1
5              1              3           3          3              3
6              2              1           1          1              1
7              2              4           4          4              3
8              2              1           7          1              1
9              2              2           2          2              2
10             2              5           3          3              4
> 
> ###US data 
> ##Attitudes Towards Action 1
> us_a1_acceptable<-c(3,1, 4, 1, 2, NA, NA, NA, NA, NA)
> us_a1_violent<-c(2,1, 2, 1, 2, NA, NA, NA, NA, NA)
> us_a1_threat<-c(2,1, 5, 1, 1, NA, NA, NA, NA, NA)
> us_a1_disgusting<-c(2,1, 3, 3, 3, NA, NA, NA, NA, NA)
> 
> ##For Action 2
> ##Attitudes Towards action 2
> us_a2_acceptable<-c(NA, NA, NA, NA, NA, 3,1, 4, 2, 5)
> us_a2_violent<-c(NA, NA, NA, NA, NA, 2,1, 2, 1, 2)
> us_a2_threat<-c(NA, NA, NA, NA, NA, 2,1, 5, 1, 3)
> us_a2_disgusting<-c(NA, NA, NA, NA, NA, 2,1, 3, 3, 4)
> 
> us_data<-data.frame(cbind(us_a1_acceptable,us_a1_violent, us_a1_threat,     us_a1_disgusting, us_a2_acceptable,us_a2_violent, us_a2_threat,     us_a2_disgusting))
> us_data
   us_a1_acceptable us_a1_violent us_a1_threat us_a1_disgusting     us_a2_acceptable us_a2_violent
1                 3             2            2                2                       NA            NA
2                 1             1            1                1                NA            NA
3                 4             2            5                3               NA            NA
4                 1             1            1                3               NA            NA
5                 2             2            1                3               NA            NA
6                NA            NA           NA               NA                    3             2
7                NA            NA           NA               NA                1             1
8                NA            NA           NA               NA                4             2
9                NA            NA           NA               NA                2             1
10               NA            NA           NA               NA                5             2
   us_a2_threat us_a2_disgusting
1            NA               NA
2            NA               NA
3            NA               NA
4            NA               NA
5            NA               NA
6             2                2
7             1                1
8             5                3
9             1                3
10            3                4
> 
> ##How acceptable is Action 1 in Ukraine?####
> 
> ##Creating a new variable for acceptable filled with NAs
> ukr_data$act1_acceptable<-NA
> 
> ###Substituting the previous values of ukr_acceptable if 
> ukr_data$act1_acceptable<-ifelse(ukr_data$ukr_actlabels==1,     ukr_data$ukr_acceptable, NA)
> table(ukr_data$act1_acceptable)

1 2 3 6 
2 1 1 1 
> 
> ###Reocding so #1=Never, 2= Rarely, 3= Sometimes, 4=Very Often, 5=Always
> ukr_data$act1_acceptable<-recode(ukr_data$act1_acceptable,`1`=5, `2`=4,     `3`=3, `4`=2, `5`=1)
> table(ukr_data$act1_acceptable)

3 4 5 6 
1 1 2 1 
> 
> ##Recoding the missing values of 6 and 7 to NA
> ukr_data$act1_acceptable[ukr_data$act1_acceptable ==6 | ukr_data$act1_acceptable ==7] <- NA 
> table(ukr_data$act1_acceptable)

3 4 5 
1 1 2 
> 
> ###How acceptable is Action 1 in the US?
> table(us_data$us_a1_acceptable)

1 2 3 4 
2 1 1 1 
> 
> 
> ###Creating a new variable 
> ###Reocding so #1=Never, 2= Rarely, 3= Sometimes, 4=Very Often, 5=Always
> us_data$act1_acceptable<-recode(us_data$us_a1_acceptable,`1`=5, `2`=4,     `3`=3, `4`=2, `5`=1)
> 
> 
> table(us_data$act1_acceptable)

2 3 4 5 
1 1 1 2 
> 
> 
> ####Returning the mean
> 
> mean(ukr_data$act1_acceptable, na.rm=TRUE)
[1] 4.25
> 
> mean(us_data$act1_acceptable, na.rm=TRUE)
[1] 3.8 

Я хотел бы, чтобы цикл возвращал следующую информацию. Для каждого действия (от действия 1 до действия 43 у меня есть 43 в моем фактическом наборе данных). Я хотел бы, чтобы цикл возвращался для каждого действия:

        1) Mean Acceptability of the Action in the US
        2) Mean Acceptability of the Action in Ukraine
        3) Mean Perception of Violence of the Action in US
        4) Mean Perception of Violence of the Action in Ukraine 
        5) Mean Threat of the Action in US
        6) Mean Threat of the Action in Ukraine
        7) Mean Disgust of the Action in the US
        8) Mean Disgust of the Action in Ukraine
        9)Cronbach's Alpha of Acceptable, Violence, Threat, and Disgust for Action in the US
        10) Cronbach's Alpha of Acceptable, Violence, Threat, and Disgust for Action in Ukraine

У меня есть электронная таблица, в которой перечислены метки (набор данных Украина) и набор данных вопросов (США), которым соответствует какое действие.

Любая помощь приветствуется! :)

...