I am working with the R programming language.
Suppose I have the following data frame:
var_1 = var_2 = var_3 = var_4 = var_5 = c("1,2,3,4,5,6,7,8,9,10")
my_data = data.frame(var_1,var_2,var_3,var_4,var_5)
my_data = rbind(my_data, my_data[rep(1, 100), ])
rownames(my_data) = 1:nrow(my_data)
The data looks like this:
head(my_data)
var_1 var_2 var_3 var_4 var_5
1 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10
2 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10
3 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10
4 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10
5 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10
6 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10
My Question: I would like to randomly replace elements in this data frame with 0 - for instance, the final result should look something like this (for brevity, I am only showing the first row):
# desired result
var_1 var_2 var_3 var_4 var_5
1 1,0,3,0,5,6,0,0,9,10 1,2,0,4,5,0,0,8,9,0 1,0,3,0,0,0,0,8,9,0 1,2,3,4,0,6,7,0,0,10 1,2,0,4,5,0,7,8,0,10
I tried to do this with the following line of code (Replace random values in a column in a dataframe) :
my_data$var_1[sample(nrow(my_data),as.integer(0.5*nrow(my_data)) , replace = TRUE)] <- 0
my_data$var_2[sample(nrow(my_data),as.integer(0.5*nrow(my_data)), replace = TRUE)] <- 0
my_data$var_3[sample(nrow(my_data),as.integer(0.5*nrow(my_data)), replace = TRUE)] <- 0
my_data$var_4[sample(nrow(my_data),as.integer(0.5*nrow(my_data)), replace = TRUE)] <- 0
my_data$var_5[sample(nrow(my_data),as.integer(0.5*nrow(my_data)), replace = TRUE)] <- 0
But this is replacing ALL the elements of a row with 0 (instead of just replacing some of the elements within a row):
head(my_data)
var_1 var_2 var_3 var_4 var_5
1 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 0 0 0
2 0 0 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 0
3 0 1,2,3,4,5,6,7,8,9,10 0 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10
4 0 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 0 1,2,3,4,5,6,7,8,9,10
5 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10
6 1,2,3,4,5,6,7,8,9,10 0 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 0
Can someone please show me what I am doing wrong and how to get the desired result?
Thanks!
Aucun commentaire:
Enregistrer un commentaire