【问题标题】:Randomly drop a column selected from a group, excluding one随机删除从组中选择的一列,不包括一个
【发布时间】:2026-01-18 18:10:01
【问题描述】:

我有以下数据框,将用作 logit 回归的输入:

my_frame<-data.frame(y=c(1,0,1),A=c(0,1,1),B=c(1,0,0),C=c(0,0,0),t=c(1,1,1),x=c(1,0,0),z=c(1,0,1))

知道虚拟变量 A、B 和 C 通过线性方程 (A+B+C=1) 连接,我需要在继续之前删除三个中的一个。

 y A B C t x z
 1 0 1 0 1 1 1
 0 1 0 0 1 0 0
 1 1 0 0 1 0 1

现在,这是困难的部分。我想随机排除由 A、B、C 和 D 组成的组中的一列,但不排除数据帧最后一行中值为 1 的列。 在我的示例中,我希望随机排除 B 和 C 之一。

列 D 不存在,因为在这个特定的数据框中,它的值始终为 0,但它仍然是同一组变量的一部分。

【问题讨论】:

    标签: r dataframe random


    【解决方案1】:

    我不太明白你关于 D 列的最后一句话是什么意思,但无论如何,你可以试试这个:

    my_frame<-data.frame(y=c(1,0,1),A=c(0,1,1),B=c(1,0,0),C=c(0,0,0),t=c(1,1,1),x=c(1,0,0),z=c(1,0,1))
    
    allRelevantCols <- c("A", "B", "C")
    
    # Get all columns, which can be excluded
    allColsToExclude <- allRelevantCols[which(my_frame[nrow(my_frame), allRelevantCols] == 0)]
    
    for (i in 1:<how often you would like to run this>) {
      colsToExclude <- c(sample(allColsToExclude, 1))
      my_frame[, -which(colnames(my_frame) %in% colsToExclude)]
    }
    

    【讨论】:

    • @karl_regensburger: colsToExclude 取值 2 和 3 对应于 B 列和 C 列。当您对这两个值进行采样以排除它们时,您得到的是排除第二列或第三列my_frame ( my_frame[, -sample(colsToExclude, 1)] )。这意味着您最终可能会排除 A 列,即第二列......相反,应该发生的是排除第三列或第四列(在此特定示例中)。
    • @Bipero 是正确的,感谢您的提示。我更正了。
    最近更新 更多