2017-05-19 42 views
1

我有以下的数据帧,这是将要使用如在分对数回归输入:随机掉落从一组中选择的列中,除去一个

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,但它仍然是同一组变量的一部分。

回答

0

我真的不明白,你的意思是与你有关列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)] 
} 
+0

@karl_regensburger:colsToExclude取值为2和3对应B列和C.当你为了排除它们而对这两个值进行采样时,你所得到的是排除my_frame的第二或第三列(my_frame [,-sample(colsToExclude,1)]))。这意味着你最终可能会排除列A(这是第二列)。相反,应该发生的是排除第三列或第四列(在此特定示例中)。 – Bipero

+0

@Bipero这是正确的,谢谢你的提示。我纠正了它。 –

相关问题