Создание вектора случайных строк с условиями в R - PullRequest
0 голосов
/ 05 апреля 2020

Проблема в следующем:

Создать вектор из 50 случайных имен, каждое из которых состоит из 5 букв, из которых только первая является заглавной. Первый, третий и пятый буквы - согласные, а второй и четвертый - гласные.

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Используйте letters и LETTERS, которые встроены в константы в R, затем определите гласные как c(1, 5, 9, 15, 21), который является подмножеством для выбора или удаления. Используйте sample, чтобы получить 50 каждого с заменой, и paste их вместе:

set.seed(69)
vowels <- c(1, 5, 9, 15, 21)
paste0( sample(LETTERS[-vowels], 50, TRUE),
        sample(letters[vowels], 50, TRUE),
        sample(letters[-vowels], 50, TRUE),
        sample(letters[vowels], 50, TRUE),
        sample(letters[-vowels], 50, TRUE))
#>  [1] "Valif" "Cirer" "Tuniw" "Kimil" "Qehoc" "Jemif" "Senoy" "Jazic" "Hihuy"
#> [10] "Cezor" "Fuzic" "Menas" "Covay" "Rupov" "Xanij" "Pujur" "Qimin" "Dunop"
#> [19] "Xokez" "Zacox" "Muhac" "Yitab" "Gojob" "Dedah" "Nepan" "Dinel" "Ceyaw"
#> [28] "Foxiv" "Fiven" "Zotob" "Bezug" "Pusod" "Jawad" "Suluq" "Zubic" "Minax"
#> [37] "Gowex" "Debec" "Xaqut" "Duvov" "Lalal" "Zavuv" "Xobuk" "Zugil" "Gibac"
#> [46] "Yocan" "Voyuh" "Nigeh" "Yuqew" "Humup"

Создано в 2020-04-05 пакетом Представить (v0 .3.0)

0 голосов
/ 05 апреля 2020

Просто с помощью для l oop для выборки встроенных векторов ПИСЬМА и букв с условным поднабором в подмножество гласных и согласных

namesList <- list()

for(i in 1:50){

  namesList[[i]] <- paste(c(sample(LETTERS[!(LETTERS %in% c("A", "E", "I", "O", "U"))], 1),
  sample(letters[(LETTERS %in% c("A", "E", "I", "O", "U"))], 1),
   sample(letters[!(LETTERS %in% c("A", "E", "I", "O", "U"))], 1),
  sample(letters[(LETTERS %in% c("A", "E", "I", "O", "U"))], 1),
  sample(letters[!(LETTERS %in% c("A", "E", "I", "O", "U"))], 1)), collapse = "")
}

namesVec <- unlist(namesList)

Или векторизованным способом (что лучше)

paste(
  sample(LETTERS[!(LETTERS %in% c("A", "E", "I", "O", "U"))], 50, replace = TRUE),
  sample(letters[(LETTERS %in% c("A", "E", "I", "O", "U"))], 50, replace = TRUE),
  sample(letters[!(LETTERS %in% c("A", "E", "I", "O", "U"))], 50, replace = TRUE),
  sample(letters[(LETTERS %in% c("A", "E", "I", "O", "U"))], 50, replace = TRUE),
  sample(letters[!(LETTERS %in% c("A", "E", "I", "O", "U"))], 50, replace = TRUE), 
sep = "")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...