我的数据框:

Dead4   Dead5
0       0
0       0
0       0
1       2
0       0
0       0
1       2
0       0
1       0
0       1
1       1
5      10

我希望我的代码在同一行中的任何时候 Dead5 大于 Dead4 减去两个值并将该值放入 Dead5
indices<- (t$Dead5 > t$Dead4)
t$Dead6[indices]<- (t$Dead6) - (t$Dead5)


Warning message:
In t$Dead6[indices] <- (t$Dead6) - (t$Dead5) :
  number of items to replace is not a multiple of replacement length

有人可以解释我做错了什么并帮助我编写几行代码来做到这一点吗?

最佳答案

你可以这样做:

indices <- (t$Dead5 > t$Dead4) # indices is a logical vector with TRUE and FALSE

t$Dead5[indices] <- (t$Dead5 - t$Dead4)[indices]

它也适用于您的 data.frame 的任何其他操作,例如:
t$Dead6[indices] <- (t$Dead6 - t$Dead5)[indices]

如果列 Dead6 存在。在每一侧,只取 indicesTRUE 的值,因此替换和替换值的长度相同,您不会收到警告。

您做错了什么是您将完整的 (t$Dead5 - t$Dead4) 向量作为替换,这比 indicesTRUE 的次数(左侧的替换值)要长。

R 仅使用替换向量的第一个值并给您警告。

关于r - 如果满足条件,则在数据框中减去两列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21320559/

10-12 18:01