2017-09-15 94 views
0

我必须分析经济实验中的数据。 因此,我有一个数据库(14 976 obs),我分为两部分:卖方的类型为1(7488 obs),另一个为类型2(7488 obs)的买方,每个数据库中有212个变量。如果一行上的值匹配,则进行条件替换

在这里,你有这两个数据库的一部分:

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 

我有很多变量,如过充一个地方放于买家行,其中并没有在那些卖家信息。所以我想要做的是在卖家数据库中替换这些信息。

对此,我有很多信息: 在匹配组73中,我们知道例如在第一阶段,主题708被多收(第一组中的一个)。据我所知,这些男子属于第1组和第73组,因此我可以确定在第一阶段多收费的卖方:性别为1的第654项。

所以,我想在卖家数据框上多收取(和其他一些)买家的价值来分析卖家的行为,但是在正确的时期,对于正确的组和正确的匹配组。

谢谢!帮助表示赞赏...

回答

0

希望这有助于!

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

谢谢你的回答,但是我试过你的解决方案,它不起作用。它创建了比我原始数据库更多的观察数据... – Marc

+0

可能您在'买家'数据框中为'Period,Matching_group,Group'组合组合了多个记录。你可以通过'library(dplyr)来确认。买家%>%group_by(Period,Matching_group,Group)%>%summarize(n = n())%>%filter(n> 1)' – Prem

0

您可以执行合并来获取所需的信息。

# 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) 

现在,如果我正确写上面的代码,这应该将Overcharging_Buyers列添加到卖家表的副本。由于4个列名称中的3个匹配,所以合并函数应自动合并到这些列上,并将不匹配的列添加为新列。然后,您可以用新添加的信息替换原始的Overcharging列。请参考here

相关问题