我有一个数据框对象,其中变量的组合由1表示,但是稀疏填充,因为我没有映射出所有组合。
e.g。
The time is {{time}} <br>
The value of PI is {{PI}}
......缺少潜在的组合[101]和[111]
由此,我想扩展A,B和C的所有组合,将结果存在于组合存在的位置,如果不存在,则将结果填充为零。
e.g。
A B C Outcome
1 0 0 700
0 1 0 900
0 0 1 450
1 1 0 280
0 1 1 100
我恐怕我真的不知道如何在功能上做到这一点。我查看了A B C Outcome
1 0 0 700
1 1 0 280
1 0 1 0 <- new row
1 1 1 0 <- new row
0 1 0 900
0 1 1 100
0 0 1 450
- 例如以下内容也使用expand.grid()
包
plyr
,其中n = 3给出
expand.grid(rlply(n, c(0,1)))
它几乎给了我我追求的网格,但我现在还不清楚如何将我的“结果”值加入到这个网格中,特别是在n很大的情况下(比如60或70个变量)。
感激不尽的任何帮助!
答案 0 :(得分:2)
Table::where('id', 1)->get(['name','surname']);
<强> 编辑:
不确定是否应该单独回答,但这是df <- read.table(text =
"A B C Outcome
1 0 0 700
0 1 0 900
0 0 1 450
1 1 0 280
0 1 1 100",
header = TRUE)
res <-
merge(
x = do.call(what = "expand.grid", lapply(head(as.list(df), - 1), unique)),
y = df,
all.x = TRUE
)
res$Outcome[is.na(res$Outcome)] <- 0
res
# A B C Outcome
# 1 0 0 0 0
# 2 0 0 1 450
# 3 0 1 0 900
# 4 0 1 1 100
# 5 1 0 0 700
# 6 1 0 1 0
# 7 1 1 0 280
# 8 1 1 1 0
包更优雅的方式:
tidyr
如果您想避免键入所有60或70列名称:
library(tidyr)
complete(df, A, B, C, fill = list(Outcome = 0))