r - 如何使用 r 中的 if 条件基于其他列创建新列
问题描述
无法找到一种方法来根据列中事件组的 if 条件生成新列。
名为“BF”的列表示流列的 (i-3),并且对于每个“事件”组将是相同的 BF。例如,在第 5 行中,“BF”的值为 39,这是事件列中所有“2”的流列(第 2 行的流)的前第 3 个值。问题是 BF[i] 不能大于 flow[i]。如果 BF[i] 大于 flow[i],则 BF 应该是流的 (i-4) 或 (i-5) 或 (1-6)...,直到 BF[i] 相等或小于 flow[i]。例如,在第 10 行中,“BF”列的值大于“flow”列的值,因此,第 10 行中 BF_1(我要创建的列)的值是 37,表示最接近的较低流量的值,在本例中为 flow[i-6]。
例如,我们有以下数据框:
flow<- c(40, 39, 38, 37, 50, 49, 46, 44, 43, 45, 40, 30, 80, 75, 50, 55, 53, 51, 49, 100)
event<- c(1,1,1,1,2,2,2,2,2,3,3,3,4,4,4,5,5,5,5,6)
BF<- c(NA, NA, NA, NA, 39, 39, 39, 39, 39, 46, 46, 46, 45, 45, 45, 80, 80, 80, 80, 53)
a<- data.frame(flow, event, BF)
这是我正在寻找的愿望输出。我想创建 BF_1 列。
flow event BF BF_1
1 40 1 NA NA
2 39 1 NA NA
3 38 1 NA NA
4 37 1 NA NA
5 50 2 39 39
6 49 2 39 39
7 46 2 39 39
8 44 2 39 39
9 43 2 39 39
10 45 3 46 37
11 40 3 46 37
12 30 3 46 37
13 80 4 45 45
14 75 4 45 45
15 50 4 45 45
16 55 5 80 30
17 53 5 80 30
18 51 5 80 30
19 49 5 80 30
20 100 6 53 53
有没有可能生成列 BF_1 的方法?请让我知道任何想法。我正在使用 for 循环并使用 if 条件,但我无法为整个事件列组保存 BF 值。
解决方案
编码有点低效,可以使用 dplyr 等,但它会完成工作并匹配BF_1
给定的列
flow <- c(40, 39, 38, 37, 50, 49, 46, 44, 43, 45, 40, 30, 80, 75, 50, 55, 53, 51, 49, 100)
event <- c(1,1,1,1,2,2,2,2,2,3,3,3,4,4,4,5,5,5,5,6)
BF <- c(NA, NA, NA, NA, 39, 39, 39, 39, 39, 46, 46, 46, 45, 45, 45, 80, 80, 80, 80, 53)
a <- data.frame(flow, event, BF)
a$BF_1 <- NA #default to NA first
for(i in 1:length(unique(a$event))){
if(is.na(a[a$event == i, "BF"][1])) next
if(a[a$event == i, "BF"][1] < a[a$event == i, "flow"][1]) a[a$event == i, "BF_1"] <- a[a$event == i, "BF"][1]
if(a[a$event == i, "BF"][1] > a[a$event == i, "flow"][1]) {
head <- min(which(a$event==i))-6
if (min(head-6) < 0) head <- 1 #making sure it doesn't overflow to row 0
a[a$event == i, "BF_1"] <- min( a[ head:min(which(a$event==i)), "flow"] ) #fill the min of the subset flow column given position
}
}
a
推荐阅读
- pandas - 在不规则时间进行测量时,如何插入时间序列
- c - 使用 DFS 通过 AST 递归
- laravel - 使用非唯一的路由键名?
- r - 消除 dplyr 冗余函数行
- java - Spring Boot 在 application.properties 中重命名 server.port
- .net-core - RabbitMq .net 核心客户端并行处理多条消息(不是一个一个)
- python-3.x - 可以在 scipy.optimize.fmin_cg 的 args 中使用 scipy 稀疏矩阵吗?
- angular - 当过滤器返回 false 时,RxJs 返回旧值
- javascript - 字符串时如何连接参数的值
- podman - 使用 buildah/podman 启动 Server (WebSphere) 作为构建步骤来配置它