gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:47:08 24 4
gpt4 key购买 nike

下面,我有一个在第一列 (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

关于R,每次在另一列中满足条件时,从数值列中的相应值和后续值中减去一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62024601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com