Проблемы с назначением элементов на вектор - PullRequest
0 голосов
/ 10 января 2019

Я написал функцию, которая случайным образом выбирает один элемент из столбца и присваивает элемент вектору.

Тем не менее, для результатов, которые я получаю, элементы символов не выбраны и не назначены должным образом Например, символ «бизнес» будет назначен как целое число.

Я не понимаю этого, потому что это сработало:

> example<-c("apple","orange","apple")
> some_vector<-rep(NA,1)
> some_vector[1]<-sample(example,1)
> some_vector
[1] "apple"

Вывод моей функции будет превращать символьные элементы в «5» или «9», некоторые числовые символы.

Пример примера и вывод здесь:

> dput(example)
structure(list(age_cat = structure(c(8L, 8L, 9L, 9L), .Label = c("20岁以上30岁以下", 
"20岁以下", "30岁以上40岁以下", "40岁以上50岁以下", 
"50岁以上60岁一下", "60岁以上70岁一下", "70岁以上", 
"50岁以上60岁以下", "60岁以上70岁以下"), class = "factor"), 
    int_trust = structure(c(1L, 2L, 1L, 1L), .Label = c("大多数人是可以信任的", 
    "要越小心越好"), class = "factor")), .Names = c("age_cat", 
"int_trust"), class = "data.frame", row.names = c(NA, 4L))
> rs <- function(df) {
+     set.seed(700)
+     some_vector<-character(2)
+     for (i in 1:2) {
+         some_vector[i]<-sample(df[[i]],1)
+     }
+     # imputed_row<-rbind(some_vector)
+     return(some_vector)
+ }
> rs(example)
[1] "8" "1"

1 Ответ

0 голосов
/ 10 января 2019

Проблема в том, что ваш example имеет factor класс

str(example)
#'data.frame':  4 obs. of  2 variables:
#$ age_cat  : Factor w/ 9 levels "20岁以上30岁以下",..: 8 8 9 9
#$ int_trust: Factor w/ 2 levels "大多数人是可以信任的",..: 1 2 1 1

Вы можете преобразовать кадр данных в символ, а затем запустить функцию, и она должна работать правильно

example[] <- lapply(example, as.character)
rs(example)
#[1] "50岁以上60岁以下"     "大多数人是可以信任的"

Однако, если вам нужно одно случайное значение sample из каждого столбца, вы также можете использовать sapply / lapply, что даст тот же результат без использования функции.

sapply(example, sample, 1)
#           age_cat              int_trust 
#   "50岁以上60岁以下"    "大多数人是可以信任的" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...