根据数据帧R上成功第一个值的条件替换第二个值

罗杰

实际上,我有一个具有2个值的数据框:

v1<- c(1,1,1,0,0,1,1,2,2,2,0,0,0,2,1,1,0,1,0,2)
v2<- c(5,5,10,-1,-5,9,7,6,1,5,3,-4,7,-6,-3,-1,7,1,5,3)
df<- data.frame(v1=v1, v2=v2)

> df
   v1 v2
1   1  5
2   1  5
3   1 10
4   0 -1
5   0 -5
6   1  9
7   1  7
8   2  6
9   2  1
10  2  5
11  0  3
12  0 -4
13  0  7
14  2 -6
15  1 -3
16  1 -1
17  0  7
18  1  1
19  0  5
20  2  3​

我要执行的操作是基于以下事实替换值V2上的值:如果V1上存在连续0(仅连续0,所以1,0,1不会计数,而1,0,0,1会计数并等等),所有V2将等于第一个V2值(其中V1中出现0)

例如:

> df[3:6,]
  v1 v2
3  1 10
4  0 -1
5  0 -5
6  1  9

#Must become 

> df[3:6,]
  v1 v2
3  1 10
4  0 -1
5  0 -1
6  1  9

或者:

> df[10:14,]
   v1 v2
10  2  5
11  0  3
12  0 -4
13  0  7
14  2 -6

#Must become 


> df[10:14,]
   v1 v2
10  2  5
11  0  3
12  0  3
13  0  3
14  2 -6​
阿克伦

仅当'v1'中的值为0我们才能使用rleid(from data.table)和replace'v2'first为'v2'创建组all

library(dplyr)
library(data.table)
df %>%
   group_by(grp = rleid(v1)) %>%
   mutate(v2 = if(all(v1 == 0)) first(v2) else v2) %>%
   ungroup %>%
   select(-grp)
# A tibble: 20 x 2
#      v1    v2
#   <dbl> <dbl>
# 1     1     5
# 2     1     5
# 3     1    10
# 4     0    -1
# 5     0    -1
# 6     1     9
# 7     1     7
# 8     2     6
# 9     2     1
#10     2     5
#11     0     3
#12     0     3
#13     0     3
#14     2    -6
#15     1    -3
#16     1    -1
#17     0     7
#18     1     1
#19     0     5
#20     2     3

或使用data.table(来自@IceCreamToucan的评论)

library(data.table)
setDT(df)[, v2 := if(first(v1) == 0) first(v2) else v2, rleid(v1)]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据第二个值找到内部数组的第一个值

来自分类Dev

如何根据第二个中的可能值范围合并两个数据帧,但保留第一个中的值?

来自分类Dev

根据第一个 Droplist 的值填充第二个 Droplist

来自分类Dev

如何为第一个数据帧中匹配的特定列值的所有值获取第二个数据帧的数据?

来自分类Dev

R根据另一个中的值搜索第二个数据帧

来自分类Dev

如果第一个数据帧中存在行,如何更新第二个数据帧的存在值

来自分类Dev

无法根据第一个微调器值获得第二个微调器值

来自分类Dev

将一个熊猫数据帧合并到另一个熊猫数据帧,并从第二个数据帧中删除第一个数据帧中存在的值

来自分类Dev

在第二个查询的值中使用第一个查询的值

来自分类Dev

在第二个查询的值中使用第一个查询的值

来自分类Dev

SQL根据第二个表中的值列表从第一个表中选择

来自分类Dev

根据第一个数组中的值在第二个数组中添加值

来自分类Dev

使用jQuery根据第一个<select>值操纵第二个<select>

来自分类Dev

根据第一个的值在第二个可观察对象上调用订阅

来自分类Dev

替换R中第一个出现的“:”,而不是第二个

来自分类Dev

根据第二个表的另一个值(sql)在第一个表中选择一个值

来自分类Dev

sql获取第一个和第二个最大值的条件

来自分类Dev

我想要第一个和第二个有条件的插入值

来自分类Dev

SQL比较第一个或第二个值对

来自分类Dev

如何从第二个对象更改第一个对象的值?

来自分类Dev

查询第二个表的第一个值

来自分类Dev

计算第二个序列中第一个序列的种子值

来自分类Dev

第二个变量取第一个值

来自分类Dev

如何从此JSON数据的第二个元素中获取第一个值?

来自分类Dev

如何根据在第一个下拉菜单中选择的值在第二个下拉菜单中选择一个值?这两个值都来自数据库

来自分类Dev

使用第一个自动完成功能清除第二个自动完成功能的值

来自分类Dev

MySQL SELECT 两个表,同时用第二个表的字段的值替换第一个表的字段的值

来自分类Dev

将一个数据帧中的NA值替换为第二个数据帧中的值

来自分类Dev

根据第二个数据帧中的值替换数据帧中的标头

Related 相关文章

  1. 1

    根据第二个值找到内部数组的第一个值

  2. 2

    如何根据第二个中的可能值范围合并两个数据帧,但保留第一个中的值?

  3. 3

    根据第一个 Droplist 的值填充第二个 Droplist

  4. 4

    如何为第一个数据帧中匹配的特定列值的所有值获取第二个数据帧的数据?

  5. 5

    R根据另一个中的值搜索第二个数据帧

  6. 6

    如果第一个数据帧中存在行,如何更新第二个数据帧的存在值

  7. 7

    无法根据第一个微调器值获得第二个微调器值

  8. 8

    将一个熊猫数据帧合并到另一个熊猫数据帧,并从第二个数据帧中删除第一个数据帧中存在的值

  9. 9

    在第二个查询的值中使用第一个查询的值

  10. 10

    在第二个查询的值中使用第一个查询的值

  11. 11

    SQL根据第二个表中的值列表从第一个表中选择

  12. 12

    根据第一个数组中的值在第二个数组中添加值

  13. 13

    使用jQuery根据第一个<select>值操纵第二个<select>

  14. 14

    根据第一个的值在第二个可观察对象上调用订阅

  15. 15

    替换R中第一个出现的“:”,而不是第二个

  16. 16

    根据第二个表的另一个值(sql)在第一个表中选择一个值

  17. 17

    sql获取第一个和第二个最大值的条件

  18. 18

    我想要第一个和第二个有条件的插入值

  19. 19

    SQL比较第一个或第二个值对

  20. 20

    如何从第二个对象更改第一个对象的值?

  21. 21

    查询第二个表的第一个值

  22. 22

    计算第二个序列中第一个序列的种子值

  23. 23

    第二个变量取第一个值

  24. 24

    如何从此JSON数据的第二个元素中获取第一个值?

  25. 25

    如何根据在第一个下拉菜单中选择的值在第二个下拉菜单中选择一个值?这两个值都来自数据库

  26. 26

    使用第一个自动完成功能清除第二个自动完成功能的值

  27. 27

    MySQL SELECT 两个表,同时用第二个表的字段的值替换第一个表的字段的值

  28. 28

    将一个数据帧中的NA值替换为第二个数据帧中的值

  29. 29

    根据第二个数据帧中的值替换数据帧中的标头

热门标签

归档