我一直在研究此问题,但未能解决。我知道答案可能很简单,但我无法解决,也无法从其他类似问题中找到解决方法。
我有以下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。
我使用了不同类型的代码,例如ifelse
,if....else
,dplyr
,但是我失败了。实际上,可能的代码只会为weights = probs1 / probs1创建权重,并将其应用于所有区域,而与组无关。
有人可以帮我解决吗? 谢谢
答案 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