我正在尝试清理用于社交网络分析的数据,并且作为编码的新手,我在编写复杂的条件时遇到了麻烦 . 首先,我们有dataframe bookinfo
,其中感兴趣的 Headers 是Date,Receiver,bookID:
>head(bookinfo)
date receiver bookId readingStatus
1 2017-04-21 03cff9d7-5712-410c-a4bf-f04ceede644b asin:0062228013 ALREADY_READ
2 2017-04-18 03cff9d7-5712-410c-a4bf-f04ceede644b asin:1442449616 ALREADY_READ
3 2017-04-24 03cff9d7-5712-410c-a4bf-f04ceede644b asin:0545851904 ALREADY_READ
4 2017-04-18 03cff9d7-5712-410c-a4bf-f04ceede644b asin:0545384176 ALREADY_READ
5 2017-06-02 03cff9d7-5712-410c-a4bf-f04ceede644b asin:0763643491 ALREADY_READ
6 2017-04-24 03cff9d7-5712-410c-a4bf-f04ceede644b asin:0545851890 ALREADY_READ
然后,我们有dataframe rec
,其中感兴趣的 Headers 是Date,Sender,Receiver和bookId:
>head(rec)
date sender receiver messageType bookId
1 4/21/17 7a28156e-950e-47b7-a4aa-241fa9cfcf1a f8b027a3-89eb-475a-83e0-eb94e24eaab4 RECOMMENDS_A_BOOK asin:0986444138
2 4/21/17 fb4eefd3-03e9-40c3-bc9e-af85ea88d827 f8b027a3-89eb-475a-83e0-eb94e24eaab4 RECOMMENDS_A_BOOK asin:1434297314
3 4/21/17 dc319e95-0e3e-461e-b02c-abab4414c741 f8b027a3-89eb-475a-83e0-eb94e24eaab4 RECOMMENDS_A_BOOK asin:1484746694
4 4/18/17 118c57b6-e946-453f-88b2-6ae1282e62ab f8b027a3-89eb-475a-83e0-eb94e24eaab4 RECOMMENDS_A_BOOK asin:1514241587
5 4/21/17 dd0de21d-889d-4bf1-9ebb-af50b6660815 f8b027a3-89eb-475a-83e0-eb94e24eaab4 RECOMMENDS_A_BOOK asin:0986444138
6 4/21/17 f85d06ea-d534-42de-a714-6dc6358d1e29 f8b027a3-89eb-475a-83e0-eb94e24eaab4 RECOMMENDS_A_BOOK asin:1484746694
在数据框 rec
中,我想创建一个新的列Ties . 有条件的如下:
Tie = 1 if
-
在
rec
中:Sender,Receiver和bookId位于同一行AND中 -
在
bookinfo
中:同一个Receiver,同一bookId在同一行中,此处的日期晚于rec
中引用行的日期 -
请注意
rec
和bookinfo
不一定一致 . 而Sender Receiver bookId可能是rec
中的第3行,而Receiver bookId可能是bookinfo
中的第10行 .
否则,Tie = 0 .
直觉是,如果接收者在从发件人收到该书的推荐日期之后显示该书的活动,那么他们就有了平局 . (如果他们在日期之前显示活动,则与发件人无关) .
在此先感谢您的帮助和时间!
1 回答
我知道你有一个复杂的数据框,但请尝试提供可重复的示例 - 创建一些大致遵循自己的虚拟数据 .
你真正想要的代码是函数内部的布尔索引 . 它使用列的整数位置,但您也可以使用列名称 .
希望这可以帮助 .
EDIT
我已经更新了代码,以便我现在将'bookinfo'中的所有数据行扫描到rec所需的匹配项 .
一般来说,正如其他人会指出的那样,我们应该通过'apply'类型函数来寻找代码,而不是编写循环 . 但是,这是一个棘手的问题,我无法立即找到解决方案 .