【发布时间】:2022-01-04 18:28:15
【问题描述】:
关于如何使用列 A 的值创建新列 B 的任何想法, 同时使用新创建的列 B 的上一行的值?
B的值应该对应于:
A0 = value of the row above.
A1 = 1.
A2 = value of the row above + 1.
当前数据框 + 期望结果
Dataframe Desired outcome
A A B
1 1 1
0 0 1
2 2 2
0 0 2
2 2 3
0 0 3
2 2 4
0 0 4
2 2 5
0 0 5
2 2 6
0 0 6
1 1 1
0 0 1
1 1 1
0 0 1
2 2 2
0 0 2
2 2 3
0 0 3
1 1 1
0 0 1
2 2 2
0 0 2
Data Frame
A <- c(1,0,2,0,2,0,2,0,2,0,2,0,1,0,1,0,2,0,2,0,1,0,2,0)
Bdesiredoutcome <- c(1,1,2,2,3,3,4,4,5,5,6,6,1,1,1,1,2,2,3,3,1,1,2,2)
df = data.frame(A,Bdesiredoutcome)
我尝试使用dpylr, mutate(), case_when() 和lag(),但一直遇到错误。由于使用了lag() 函数。使用lag(A) 时,无法生成所需的结果。
关于如何解决这个问题的任何想法?
df <- df %>%
mutate(B = case_when((A == 0) ~ lag(B),
(A == 1) ~ 1,
(A == 2) ~ (lag(B)+1)
))
Error in UseMethod("mutate_") :
no applicable method for 'mutate_' applied to an object of class "function"
In addition: Warning message:
【问题讨论】:
-
错误是因为你没有
B列,而只有Bdesired即如果你做了` mutate(B = Bdesired, B= case_when((A == 0) ~滞后(B),...`它应该工作 -
感谢您的快速分析,遗憾的是,Bdesired 是预期的结果,不适用于整个数据。因此,我尝试仅使用 A 来计算 B。结果形式 B 应与 Bdesired 相同。我已经编辑了帖子以使其清楚,谢谢=)
-
好的,但是当您的代码根本不存在时,它会显示
lag(B)