我的数据框:
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
存在。在每一侧,只取 indices
为 TRUE
的值,因此替换和替换值的长度相同,您不会收到警告。您做错了什么是您将完整的
(t$Dead5 - t$Dead4)
向量作为替换,这比 indices
是 TRUE
的次数(左侧的替换值)要长。R 仅使用替换向量的第一个值并给您警告。
关于r - 如果满足条件,则在数据框中减去两列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21320559/