2017-09-15 2 views
0

Je dois analyser les données d'une expérience économique. J'ai donc une base de données (14 976 obs) que j'ai divisée en deux: une pour les vendeurs - qui sont de type 1 (7488 obs) et une autre pour les acheteurs de type 2 (7488 obs) avec 212 variables chacune.Remplacement conditionnel si les valeurs d'une ligne correspondent

Ici, vous avez une partie des deux bases de données:

sellers 
ID  Gender Period Matching group Group Type Overcharging ... 
654  1   1   73   1  1  NA 
654  1   2   73   1  1  NA 
654  1   3   73   1  1  NA 
654  1   4   73   1  1  NA 
435  1   1   73   2  1  NA 
435  1   2   73   2  1  NA 
435  1   3   73   2  1  NA 
435  1   4   73   2  1  NA 

buyers 
ID  Gender Period Matching group Group Type Overcharging ... 
708  0   1   73   1  2  1 
708  0   2   73   1  2  0 
708  0   3   73   1  2  0 
708  0   4   73   1  2  1 
546  1   1   73   2  2  0 
546  1   2   73   2  2  0 
546  1   3   73   2  2  1 
546  1   4   73   2  2  0 

J'ai beaucoup de variables comme le Surcharger un où des informations où mettre dans les rangs des acheteurs et non pas dans les vendeurs les. Donc, ce que je voudrais faire est de remplacer ces informations dans la base de données des vendeurs.

Pour cela j'ai beaucoup d'informations: Dans le groupe assorti 73 nous savons par exemple qu'à la période 1 le sujet 708 était surchargé (celui dans le groupe 1). Comme je sais que cet homme appartient au groupe 1 et au groupe correspondant 73, je suis capable d'identifier le vendeur qui l'a surchargé à la période 1: sujet 654 avec sexe = 1. Donc, je voudrais mettre des valeurs d'acheteurs de surcharge (et d'autres) sur la base de données des vendeurs pour analyser le comportement des vendeurs mais à la bonne période, pour le bon groupe et le bon groupe correspondant.

Merci! L'aide est appréciée ...

Répondre

0

Espérons que cela aide!

library(dplyr) 
#join both dataframes on common columns 
merged_df <- left_join(sellers, buyers, by=c('Period', 'Matching_group', 'Group')) 

#find row_index which have missing "Overcharging" in sellers 
idx <- which(is.na(merged_df$Overcharging.x)) 
merged_df[idx, "Overcharging.x"] <- merged_df[idx, "Overcharging.y"] 

#drop unwanted columns to have the updated sellers 
sellers_updated <- merged_df[,-c(dim(sellers)[2]+1: dim(merged_df)[2])] 
colnames(sellers_updated) <- colnames(sellers) 
sellers_updated 
+0

Merci pour votre réponse, mais j'ai essayé votre solution et cela ne fonctionne pas. Cela me crée plus d'observations que ma base de données originale ... – Marc

+0

Vous avez probablement plusieurs enregistrements pour la combinaison 'Period, Matching_group, Group' dans la base de données' buyers'. Vous pouvez le confirmer par 'library (dplyr); acheteurs%>% group_by (Période, Groupe correspondant, Groupe)%>% summary (n = n())%>% filter (n> 1) ' – Prem

0

Vous pouvez effectuer une fusion pour obtenir les informations dont vous avez besoin.

# Select the Period, Matching Group, Group and Overcharging columns 
# Selection by column ID (2nd, 3rd, 4th, 6th columns) 
buyers_merge <- buyers[, c(2,3,4,6)] 
# Rename the Overcharging column 
names(buyers_merge)[4] <- "Overcharging_Buyers" 
# Merge 
sellers_merged <- merge(sellers, buyers_merge) 

Maintenant, si je l'ai écrit le code ci-dessus correctement, il faut ajouter la colonne Overcharging_Buyers à une copie de la table des vendeurs. Étant donné que 3 des 4 noms de colonne correspondent, la fonction de fusion doit fusionner automatiquement sur ces colonnes et ajouter la colonne non correspondante en tant que nouvelle colonne. Vous pouvez ensuite remplacer la colonne de surcharge originale par les informations nouvellement ajoutées.

Pour plus d'informations sur la fonction de fusion, voir here.