Случайно увеличивать значения строки (двоичные) с конкретными условиями - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть такой набор данных:

A   B C D E F G
12  1 0 0 0 0 0
Hey 0 1 0 0 0 0
No  0 0 0 0 0 1 
Yes 0 0 0 0 1 0 

Я хочу построить сценарий, что произойдет, если КОЛОННА на 10% больше ДА (да = 1). Но, в моем сценарии, это должно быть сделано с 3 столбцами одновременно.

Итак: предположим, что интересующие строки находятся там, где B = 1 или C = 1 или D = 1. Если один из столбцов равен 1, это нормально. Но я хочу (случайным образом) превратить 10% оставшихся строк (где B = 0 и C = 0 & D = 0) в 1 (и, конечно, если мы их дадим (случайным образом 10% оставшихся строк) a 1, то остальные столбцы должны быть все 0 (кроме столбца A)).

Извините, действительно было трудно объяснить эту проблему. Надеюсь, это понятно.

Результат должен выглядеть примерно так (он не представляет 10%, поскольку пример слишком мал).

A   B C D E F G
12  1 0 0 0 0 0
Hey 0 1 0 0 0 0
No  0 0 0 0 0 1 
Yes 0 1 0 0 0 0

где вы можете видеть, что «Да» случайным образом назначается как C = 1, а его первоначальное значение устанавливается обратно в 0.

1 Ответ

0 голосов
/ 01 ноября 2018

Я считаю, что это то, что вы хотите:

данные:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...