R,每次在另一列中满足条件时,从数字列中的对应值和后续值中减去一个值

RTT:

下面,我在第一列(col1)中有一个具有连续值的数据框。当在第二列(col2)中遇到一个“ q”时,必须从列1中的对应值中减去1,然后从列1中减去所有其他值。当遇到第二个q时,又要加上一个1从第1列中的对应值减去第1列中的所有其他值减去。等等。请注意,每个新数据帧在第1列和第2列中都有不同的值。我想知道哪种方法正确吗?我尝试了子集和if else语句。以下代码无法产生连续编号。

df$col3 = ifelse(df$mut!="q",df$col1, ifelse(grepl("q",df$col2),(df$col1-1),0) )

示例数据集


col1 = c(115,116,117,118,119,120,121,122,123,124) 
col2 = c('s1','s2','s3', "q", "s4", "q", "s5", "q", "q", "s6")
df = data.frame(col1, col2)

col1 col2
115  s1
116  s2
117  s3
118  q
119  s4
120  q
121  s5
122  q
123  q
124  s6

预期的输出应如下所示:

col1 col2 col3
115  s1   115
116  s2   116
117  s3   117
118  q    117
119  s4   118
120  q    118
121  s5   119
122  q    119
123  q    119
124  s6   120

谢谢

GKi:

您可以使用cumsum累积其中的情况,df$col2 == "q"然后减去此形式df$col1

df$col3 <- df$col1 - cumsum(df$col2 == "q")
#   col1 col2 col3
#1   115   s1  115
#2   116   s2  116
#3   117   s3  117
#4   118    q  117
#5   119   s4  118
#6   120    q  118
#7   121   s5  119
#8   122    q  119
#9   123    q  119
#10  124   s6  120

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果一列中的前一个值和另一列中的下一个值满足条件,则使用 r 将 1 添加到另一列中

R:在满足条件的行中查找一个值,向该值添加某些数字,然后在该行的另一列中创建一条消息

对应于另一列中数字的第一个和最后出现的一列中的值之和-MATLAB

R 中的变异列:根据另一列条件从列中减去值

如果一列中存在数字,请在与该数字对应的另一列中查找一个值

Excel-在一个列中查找唯一值,在另一列中查找对应的值

R:从基于另一列的行中减去值

根据R中另一列的最小值获得一列的对应值

检查列中的每个值在另一列中只有一个对应的值

在pandas列中满足条件时,返回另一列的值

如果满足条件,则用另一列中的值替换一列中的行

根据另一列中的值减去R中列中的a值

Excel,计算某一列的总和,其中另一列中的对应行等于一个值

仅当满足另一列中的条件时,才能将2值列中的值更改为相反值

熊猫在一个列中检索对应于另一列中最大值的值

根据R或python中的条件,从另一列列表中替换一个列列表中的值

从另一列中的值减去另一列中的值(TSQL)

如何找到与另一列中的另一个值对应的列中的值的最大值?(描述中的例子)

基于另一列中的值的一列中的对应值

在一列中查找与另一列中不同值相对应的重复值

对于另一个矩阵的每一列,逐行从一个矩阵中减去值

列中的条件格式单元格基于它在另一列中的对应值

TypeError:尝试从一个熊猫数据框列中的值减去另一列时的值不受支持的操作数类型

R满足3个条件的情况下比较一列中的行值

添加具有对应于看到另一列中的值的次数的数字的列

创建新列以将与另一列中的另一个重复值相对应的值排列在一行中

通过R中的另一列条件检索值

根据另一列中的匹配值和第三列中的第一个值的不同出现,对一列中的值求和

检查一列中的一个值是否在另一列中