r - 如果满足某些条件,则从下一行中的变量中减去变量
问题描述
如果满足某些条件,我想从下一行的变量中减去一个变量。考虑以下数据框:
time <- c(12, 14, 16, 10, NA, 18)
type <- c("morning", "noon", "evening", "morning", "noon", "evening")
data <- data.frame(time, type)
由于我的数据中有 4000 行,因此我需要一个具有两个变化值的循环(用于两行感兴趣的行)。我还没有尝试实现循环,因为我很难在列中选择特定的行和特定的值。(但我也非常感谢有关如何包含循环的建议!)到目前为止,代码如下所示:
if(data[which(data[row1, "type"] =="morning")] & data[which(data[row2, "type"] == "noon")]) | data[which(data[row1, "type"] =="noon")] & data[which(data[row2, "type"] == "evening")]) {
data[row2, "difference"] <- data[row2, "time"] - data[row1, "time"]
} else{
data[row2, “difference"] <- NA
}
所以我想从row2中的时间减去row1中的时间值,并将结果存储在row2中的变量“difference”中。但是,仅当满足两个条件之一时才应减去这些值。
解决方案
也许你可以试试这个
transform(
data,
difference = ave(time, cumsum(type == "morning"), FUN = function(x) c(NA, diff(x)))
)
这使
time type difference
1 12 morning NA
2 14 noon 2
3 16 evening 2
4 10 morning NA
5 NA noon NA
6 18 evening NA
数据
> dput(data)
structure(list(time = c(12, 14, 16, 10, NA, 18), type = c("morning",
"noon", "evening", "morning", "noon", "evening")), class = "data.frame", row.names = c(NA,
-6L))
推荐阅读
- sql - 如何在 with 子句中使用 max 来获取单个值并在主查询中使用该值进行空检查
- laravel - Laravel:查询构建器中的意外函数(T_Function)
- postgresql - 仅在授予锁定时才执行 Postgres 查询
- ssl - 通过 Domino 托管 bean 到支付网关的 SSL 连接失败并出现“handshake_failure”
- sql - JPA按选定列获取结果列表顺序
- webdriver - Codeception WebDriver url 删除尾部斜杠
- android - Android路径跟随(谷歌地图)以编程方式
- json - 使用 Scala/Play 将 JSON 转换为具有嵌套对象的案例类
- ruby-on-rails - 通过 gitbash 命令行推送到 Bitbucket 远程仓库
- c - 使 char 指针指向 null 会导致分段错误