gpt4 book ai didi

r 用填充的数据扩展数据集

转载 作者:行者123 更新时间:2023-12-04 10:04:11 24 4
gpt4 key购买 nike

我有一个包含 4 列的数据集。现在这可以取 2 个值。(1 或 0)。有三列(X1、X2、X3)缺少数据。

Row#    X1   X2   X3    Y
1 1 0 0 1
2 0 1 1 0
3 NA 0 0 0
4 1 1 1 0
5 1 NA NA 1
6 1 0 0 1
7 NA NA NA 0
8 0 1 0 1
9 NA NA 1 0
10 0 0 1 1
11 NA NA 0 0
12 0 0 0 0
13 0 0 1 1
14 NA 0 NA 0

我对为 NA 的可能值创建填充数据集感兴趣。我的意思是创建如下可能的数据行
Row#   X1  X2  X3  Y  Probability  Comments
1 1 0 0 1 1 No missing
2 0 1 1 0 1 No missing

3 1 0 0 0 0.5 X1 Missing
4 0 0 0 0 0.5 X1 Missing

5 1 1 1 0 1 No missing

6 1 1 0 1 0.25 X1, X2 missing
7 1 0 0 1 0.25 X1, X2 missing
8 1 1 1 1 0.25 X1, X2 missing
9 1 0 1 1 0.25 X1, X2 missing

10 1 0 0 1 1 No missing

11 0 0 0 0 0.125 X1, X2, x3 missing
12 1 0 0 0 0.125 X1, X2, x3 missing
13 0 1 0 0 0.125 X1, X2, x3 missing
14 0 0 1 0 0.125 X1, X2, x3 missing
15 1 1 0 0 0.125 X1, X2, x3 missing
16 1 0 1 0 0.125 X1, X2, x3 missing
17 0 1 1 0 0.125 X1, X2, x3 missing
18 1 1 1 0 0.125 X1, X2, x3 missing
19 . . . . . ......
20 . . . . . ......
21 . . . . . ......
22 . . . . . ......

请注意最终数据集将包含 5 列(X1、X2、X3、Y、可能性)

栏目 Probability就是按照这个逻辑计算的。
  • 让我们从第一个数据集中的 Row1&2 开始。前两行 (1,2) 没有任何缺失数据,因此在预期输出中生成相同的两行,概率为 1。
  • 让我们看看原始数据集中的 Row3。这在 X1 列中有缺失值。因此在预期输出中生成了两行 3,4。因此概率为 0.5、0.5。 1/2=0.5
  • 让我们看看原始数据集中的第 5 行。这包含 X2 和 X3 列中的缺失数据。所以这将在预期数据中生成 4 行,第 6、7、8.9 行。所以概率是 0.25, 0.25,0.25, 0.25, 1/4 = 0.25
  • 原始数据集的第 7 行缺少 x1、x2、x3 的值。所以这个场景将在预期的输出数据集中生成 8 行,第 11 行-第 18 行。因此概率 0.125 , 1/8 = 0.125

  • 我可以使用 8 个 ifelse 语句和 for 循环来做到这一点。但我想知道是否有任何更简单、更简洁的方法来实现这一点。谢谢。

    最佳答案

    我为 {0,1} 的组合定义了一个函数对于任何使用 expand.grid 的数字.对于 n等于 0 ,我使用了一个具有 1 维的 data.frame 来避免没有 NA 的行的复杂化。 .

    comb <- function(n) { 
    if(n==0) return(data.frame(Var1 = c(1)))
    expand.grid(rep(list(0:1),n))
    }

    现在我使用 apply 和 replace 函数来创建行列表。我用过 mutate来自 dplyr创建概率列。
    df = apply(df, 1, function(v){
    NA_count = length(which(is.na(v)))
    apply(comb(NA_count) , 1 , FUN = replace , x = v, list =
    which(is.na(v))) %>%
    t %>% as.data.frame() %>%
    mutate( Probability = (1/2)^length(which(is.na(v))))
    })

    最后,我把所有的列表和 do.call放在一起。 .
    do.call(rbind,df)

    关于r 用填充的数据扩展数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61669123/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com