r-条件替换如果在行匹配中值



我必须分析经济学实验的数据。因此,我有一个数据库(14 976 obs),我分为两个:一个是卖方的,一个是1型(7488 obs),另一个用于2型买家(7488 obs)(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组中,我们知道,例如,在1个时期,主题708被过多收费(第1组中的一个)。据我所知,这名男子属于第1组,并匹配73组,我能够识别出在第1期中收取过多收费的卖方:主题654的性别=1。

因此,我想将过度收费(以及其他一些)买家的价值观放在卖方数据框架上,以分析卖方的行为,但在正确的时期,对于正确的组和正确的匹配组。

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

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

# 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个匹配,因此合并函数应自动合并到这些列上,并将非匹配列添加为新列。然后,您可以用新添加的信息替换原始的过度充电列。

有关合并功能的更多信息,请参见此处。

最新更新