r中的if条件

时间:2018-10-05 12:46:26

标签: r for-loop if-statement

我一直在研究此问题,但未能解决。我知道答案可能很简单,但我无法解决,也无法从其他类似问题中找到解决方法。

我有以下data.frame:

region    group   probs1   probs2   probs3   probs4     weights
   1        2       0.2       0.3     0.4       0.1        NA
   2        4       0.3       0.4     0.15      0.15       NA
   3        3       0.4       0.1     0.3       0.2        NA
   4        1       0.7       0.1     0.1       0.1        NA
   5        1       0.2       0.3     0.4       0.1        NA
   6        2       0.6       0.1     0.1       0.2        NA
   7        3       0.7       0.1     0.1       0.1        NA
   8        4       0.3       0.2     0.1       0.4        NA
   9        3       0.2       0.1     0.1       0.6        NA
  10        1       0.1       0.2     0.1       0.6        NA

我要做的是在data.frame中创建一个称为“权重”的新列,该列的计算方式类似于group == 1,然后weights = probs1 / probs1。如果group == 2,则权重= probs1 / probs2。如果group == 3,则权重= probs1 / probs3。如果group == 4,则权重= probs1 / probs4。

我使用了不同类型的代码,例如ifelseif....elsedplyr,但是我失败了。实际上,可能的代码只会为weights = probs1 / probs1创建权重,并将其应用于所有区域,而与组无关。

有人可以帮我解决吗? 谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用dplyr::case_when

library(dplyr)
df %>%
    mutate(weights = case_when(
        group == 1 ~ probs1 / probs1,
        group == 2 ~ probs1 / probs2,
        group == 3 ~ probs1 / probs3,
        TRUE ~ probs1 / probs4))
#   region group probs1 probs2 probs3 probs4   weights
#1       1     2    0.2    0.3   0.40   0.10 0.6666667
#2       2     4    0.3    0.4   0.15   0.15 2.0000000
#3       3     3    0.4    0.1   0.30   0.20 1.3333333
#4       4     1    0.7    0.1   0.10   0.10 1.0000000
#5       5     1    0.2    0.3   0.40   0.10 1.0000000
#6       6     2    0.6    0.1   0.10   0.20 6.0000000
#7       7     3    0.7    0.1   0.10   0.10 7.0000000
#8       8     4    0.3    0.2   0.10   0.40 0.7500000
#9       9     3    0.2    0.1   0.10   0.60 2.0000000
#10     10     1    0.1    0.2   0.10   0.60 1.0000000

样本数据

df <- read.table(text =
    "region    group   probs1   probs2   probs3   probs4     weights
   1        2       0.2       0.3     0.4       0.1        NA
   2        4       0.3       0.4     0.15      0.15       NA
   3        3       0.4       0.1     0.3       0.2        NA
   4        1       0.7       0.1     0.1       0.1        NA
   5        1       0.2       0.3     0.4       0.1        NA
   6        2       0.6       0.1     0.1       0.2        NA
   7        3       0.7       0.1     0.1       0.1        NA
   8        4       0.3       0.2     0.1       0.4        NA
   9        3       0.2       0.1     0.1       0.6        NA
  10        1       0.1       0.2     0.1       0.6        NA", header = T)

答案 1 :(得分:0)

您可以尝试使用 --pid="" Set the PID mode for the container Default is to create a private PID namespace for the container 'container:<name|id>': join another container's PID namespace 'host': use the host's PID namespace for the container. Note: the host mode gives the container 软件包来解决此问题,尽管也可以不这样做。

dplyr