是否有R函数为唯一的行值创建唯一的列值

时间:2019-07-16 19:33:50

标签: r loops if-statement

我正在尝试创建一个新列“ Dose”。剂量值取决于“时间”和“ ID”列的值。对于所有的时间值,它们都是168的倍数,应该有Dose值。 Dose的值进一步取决于“ ID”的值

我正在尝试使用If-else语句 enter image description here

2 个答案:

答案 0 :(得分:0)

让我们考虑以下伪造数据集:

fake_data <- data.frame(Time = round(168 * sample(c(runif(10, 0, 10), sample(1:10, replace = TRUE)))),
                        ID   = sample(50, 20))

Dose是168的倍数时,IDTime之间的伪函数关系如下:

f <- function(x) 2 + 3 * x

然后,可以这样计算新列Dose

dplyr::mutate(fake_data, Dose = ifelse(Time %% 168 < 1, f(ID), NA))

请注意,这里我们假设Time变量为整数。如果为两倍,则可能需要使用Time %% 168 < 1e-10之类的条件。

答案 1 :(得分:0)

这可能对您有用。

样本数据:

public ActionResult SetState(int contentItemId, bool state) {
    var contentItem = _contentManager.GetLatest(id);
    if (contentItem == null) return HttpNotFound();
    var field = contentItem
        .Parts
        .SelectMany(p => p.Fields)
        .FirstOrDefault(f => f.Name == "State") as BooleanField;
    if (field != null) {
        field.Value = state;
    }
    return RedirectToAction("SomeAction");
}
time <- c(0,168, 336, 341,503,504,673,839,840,0,24,48,168, 0, 24, 48, 168, 336)
ID <- c(1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3)
data <- data.frame(time, ID)

返回:

library(tidyverse)
data %>% mutate(dose = ifelse(data$time %% 168, "NA",
ifelse(data$ID == 1, 1, 
ifelse(data$ID == 2, 5,
ifelse(data$ID == 3, 10, "NA")))))