首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何考虑R中每个观察的后续行和先前行

如何考虑R中每个观察的后续行和先前行
EN

Stack Overflow用户
提问于 2017-06-07 11:06:29
回答 1查看 50关注 0票数 0

我需要创建2列: PRETARGET和基于几种条件的目标。

要创建PRETARGET,对于我的数据中的每一行(对于每个参与者PPT和试用版),我需要检查CURRENT_ID是否与列CanBePretarget中的值0相关联,并且下一行是CURRENT_ID + 1的值。如果满足这些条件,那么如果它们不满足值1,那么我希望值为0。

要创建目标,对于我的数据中的每一行(对于每个参与者PPT和试用版),我需要检查CURRENT_ID与列CanBeTarget中的值0相关联,并且前一行是CURRENT_ID - 1的值。如果满足这些条件,那么如果它们不满足值1,那么我希望值为0。

此外,如果PRETARGET中的结果是1,那么目标中下一行的值也应该是1。

我在下面的示例中添加了所需的输出。

我正在考虑使用for循环和ifelse语句,但我不知道如何考虑每个观察的下一行/前一行。

代码语言:javascript
运行
复制
PPT   TRIAL PREVIOUS_ID CURRENT_ID  NEXT_ID CURRENT_INDEX CanBePretarget CanBeTarget    PRETARGET   TARGET
ppt01 11    2           3           4       3             0              0              0           1
ppt01 11    3           4           3       4             1              0              1           0
ppt01 11    4           5           6       8             0              0              1           1
ppt01 11    6           7           8       10            0              0              1           1
ppt01 11    7           10          11      18            0              1              0           1
ppt01 11    10          11          12      19            0              0              0           0
ppt01 11    11          12          14      20            1              0              1           0
ppt01 12    1           2           1       2             1              0              1           1
ppt01 12    2           3           4       5             0              0              1           1
ppt01 12    5           6           6       8             0              0              0           1
ppt01 12    6           7           7       10            0              0              0           0
ppt01 12    7           8           9       12            0              0              0           0
ppt01 12    8           9           9       13            0              0              0           0
ppt01 12    9           10          11      16            0              0              0           0
ppt01 12    10          11          11      17            0              0              0           0
ppt01 13    1           2           2       2             1              0              1           1
ppt01 13    3           3           3       10            0              0              1           1
ppt01 13    4           5           6       13            0              0              0           1
ppt01 13    5           6           7       14            0              0              1           0
ppt01 13    9           9           10      19            0              0              0           1
ppt01 13    9           10          10      20            0              0              0           0
ppt01 13    10          11          12      22            0              0              0           0
ppt01 13    11          12          12      23            0              0              1           0
ppt01 14    10          11          11      15            0              0              0           1
ppt01 14    11          12          12      17            0              0              1           0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-07 12:57:09

这可以通过使用dplyr来实现。

代码语言:javascript
运行
复制
df.new <- df %>% 
          mutate(PRETARGET1 = abs(as.numeric(CanBePretarget == 0 & lead(CURRENT_ID, default = 0) == (CURRENT_ID + 1)) - 1)) %>% 
          group_by(PPT, TRIAL) %>% 
          mutate(TARGET1 = abs(as.numeric((CanBeTarget == 0 & lag(CURRENT_ID, default = 0) == (CURRENT_ID - 1)) ) -1),
                 TARGET1 = ifelse(lag(PRETARGET1, default = 0) == 1, 1, TARGET1))

为了与您的结果进行比较,我创建了PRETARGET1TARGET1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44410935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档