根据数据帧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 条评论
登录 后参与评论

相关文章

根据第二个数据帧中 2 列中的值,为第一个数据帧中的某些列添加后缀

根据第二个条件从第一个条件获取数据

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

根据第二个值返回数组的第一个值

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

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

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

检查第一个数据帧值以任何第二个数据帧值开始

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

根据多个条件用第二个数据帧中的值替换数据帧中的 NA

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

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

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

查找第一个值并返回列表中的第二个值

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

根据第一个表的ID对第二个表中的值求和,并将值插入第一个表中

Python:根据第一个列表索引确定第二个列表中的值

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

根据第一个下拉框的值预填充第二个下拉框

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

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

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

根据第一个数据列的值对第二个数据表中的行进行计数而不合并

pandas:如果该值在第二个数据框中,则根据另一个数据框中的条件替换列中的值

从每行中减去第一个或第二个值

Javascript:获取第一个和第二个斜杠的值

第二个变量取第一个值

查询第二个表的第一个值

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