I am trying to create a loop for making a series of dummy data files. Basically, I want a loop to create three dataframes: h00_2000, h10_2000, s00_2000, with the associated x values of h00_, h10_, and s00 for naming purposes. I want them to have three columns each with 5 observations, x_city, x_race, and id. x_city should have a random string, x_race should be 1 or 2, and id should be random numbers. This is where I am at, but the loop doesn't work, and I don't know how to assign it to the dataframe names I've given:
for(x in c("h00_", "h10_", "s00_")){
paste0(x, "city") <- do.call(paste0, replicate(5, sample(LETTERS, 50, TRUE), FALSE))
paste0(x, "race") <- do.call(paste0, replicate(1, sample(1:2, 50, TRUE), FALSE))
id <- do.call(paste0, replicate(5, sample(0:9, 50, TRUE), FALSE))
}
UPDATE: based on the response below, I have gotten here:
for(x in c("h00_", "h10_", "s00_")){
assign(paste0(x, "2000"), data.frame(
assign(paste0(x,"city"), do.call(paste0, replicate(5, sample(LETTERS, 50, TRUE), FALSE))),
assign(paste0(x,"race"), do.call(paste0, replicate(1, sample(1:2, 50, TRUE), FALSE))),
id = do.call(paste0, replicate(5, sample(0:9, 50, TRUE), FALSE))))
}
I still can't get the first two columns to rename themselves properly. Right now it's named "assign.paste0.x...city....do.call.paste0..replicate.5..sample.LETTERS.
CodePudding user response:
You can use assign:
for(x in c("h00_", "h10_", "s00_")){
assign(paste0(x, "2000"), data.frame(
city = do.call(paste0, replicate(5, sample(LETTERS, 50, TRUE), FALSE)),
race = do.call(paste0, replicate(1, sample(1:2, 50, TRUE), FALSE)),
id = do.call(paste0, replicate(5, sample(0:9, 50, TRUE), FALSE))))
}
head(h00_2000)
#> city race id
#> 1 LCJUC 2 51629
#> 2 TEQLS 2 20029
#> 3 OWNQB 2 51191
#> 4 LZXHI 2 02100
#> 5 CYOPQ 1 26055
#> 6 JCXHT 2 50408
head(h10_2000)
#> city race id
#> 1 EJFHL 2 33186
#> 2 VBPID 1 10350
#> 3 PSQLN 2 21706
#> 4 GYMPY 1 68808
#> 5 CMKUS 2 64416
#> 6 ERELS 1 26259
head(s00_2000)
#> city race id
#> 1 WOWMI 2 95953
#> 2 JAGIW 1 32360
#> 3 NMVYS 2 83824
#> 4 TDQZO 1 44549
#> 5 QTIWO 1 39824
#> 6 WJPUU 2 29531