Я считаю, что это то, что вы хотите:
данные:
df1<-
structure(list(A = c("12", "Hey", "No", "Yes"), B = c(1L, 0L,
0L, 0L), C = c(0L, 1L, 0L, 0L), D = c(0L, 0L, 0L, 0L), E = c(0L,
0L, 0L, 0L), F = c(0L, 0L, 0L, 1L), G = c(0L, 0L, 1L, 0L)), row.names = c(NA,
-4L), class = "data.frame")
Код:
m <- `rownames<-`(df1[,-1],df1[,1]) # make your life simple, add character col as rownames
percentage = .5 # choose any percentage you like from 0 to 1, .1 for 10%
amountOf1 = floor(percentage * ncol(m)) # get the amount of ones based on percentage
IND <- which(rowSums(m[,1:3]) == 0) # get those rows having B, C, D with 0
for(i in IND) {
m[i,] = sample(rep(1:0,c(amountOf1,ncol(m)-amountOf1)) )
}
результат: (теперь 50% составляют 1 в строках, где B, C, D равно 0)
# B C D E F G
#12 1 0 0 0 0 0
#Hey 0 1 0 0 0 0
#No 1 0 0 0 1 1
#Yes 1 0 1 0 0 1