我有一个这样的数据集:
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
我想构建一个场景,如果COLUMN的YES多10%(是= 1),将会发生什么。但是,在我的场景中,应该同时使用3列。
因此:假设感兴趣的行是B = 1或C = 1或D = 1。如果其中一列等于1,就可以了。但是我想(随机地)将剩余的10%的行(其中B = 0&C = 0&D = 0)变成1(当然,如果我们给它们(剩余的10%的随机行)为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。
答案 0 :(得分:1)
我相信这就是您想要的:
数据:
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%是B,C,D为0的行中的1)
# 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