下面,我在第一列(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
谢谢
您可以使用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] 删除。
我来说两句