如果行上的值匹配,则有条件替换

时间:2017-09-15 10:33:54

标签: r database loops replace conditional

我必须分析经济学实验的数据。 所以我有一个数据库(14 976个障碍物),我将其分为两个:一个用于卖家 - 他们是类型1(7488个障碍物),另一个用于购买者类型2(7488障碍物),每个都有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。

所以,我想在卖家数据框架上过度收费(和其他一些)买家价值,以分析卖家的行为,但在正确的时间段,对于正确的群体和正确的匹配群体。

谢谢!感谢帮助...

2 个答案:

答案 0 :(得分:0)

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

const C* cObj;
void* obj = (void*)cObj;

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

有关合并功能的更多信息,请参阅here

答案 1 :(得分: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