Ошибка в match.names (clabs, names (xi)): имена не соответствуют предыдущим именам - PullRequest
0 голосов
/ 20 ноября 2018
  1. Я создаю вектор с 5 возрастными значениями и назвал его boys_age .Аналогичным образом создан вектор с именем girls_age.

Например:

boys_age <- c(18,15,16,17,19)
girls_age<- c(16,14,18,17,15)

Затем добавьте rbind() два вектора для создания data.frame , чтобы у меня было два столбца с именами group и age.

Значения boys_age и girls_age должны быть в столбце age.Столбец group должен содержать значения категорий, мальчики / девочки , для определения исходного вектора.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

На самом деле это самая простая вещь в R:

data:

df1 <- data.frame(boys_age = c(18,15,16,17,19), girls_age = c(16,14,18,17,15))

code:

library(data.table)
melt(setDT(df1), variable.name = "group", value.name = "age", measure.vars = c("boys_age", "girls_age"))[,2:1][,group:=sub("_.*$","",group)][]

result:

#    age group
# 1:  18  boys
# 2:  15  boys
# 3:  16  boys
# 4:  17  boys
# 5:  19  boys
# 6:  16 girls
# 7:  14 girls
# 8:  18 girls
# 9:  17 girls
#10:  15 girls

Кажется, вы заинтересованы в использовании ?rbind: (хотя это не практично)

rbind(
    cbind.data.frame(age = df1$boys_age,  group = "boys"),
    cbind.data.frame(age = df1$girls_age,  group = "girls")
    )

#   age group
#1   18  boys
#2   15  boys
#3   16  boys
#4   17  boys
#5   19  boys
#6   16 girls
#7   14 girls
#8   18 girls
#9   17 girls
#10  15 girls
  • В разделе ?cbind я использую функцию утилизации Rобеспечивает.Читайте об этом.
  • Почему я использую cbind.data.frame, иначе cbind создаст матрицу и, следовательно, числа возраста будут преобразованы в символы.
0 голосов
/ 20 ноября 2018

Вот один вариант с использованием stack

out <- stack(list(boys = boys_age, girls = girls_age))
out
#   values   ind
#1      18  boys
#2      15  boys
#3      16  boys
#4      17  boys
#5      19  boys
#6      16 girls
#7      14 girls
#8      18 girls
#9      17 girls
#10     15 girls

Теперь измените имена

names(out) <- c("age", "group")
out
#   age group
#1   18  boys
#2   15  boys
#3   16  boys
#4   17  boys
#5   19  boys
#6   16 girls
#7   14 girls
#8   18 girls
#9   17 girls
#10  15 girls

Вы также можете сделать то же самое в одной строке, благодаря @ Sotos

setNames(stack(list(boys = boys_age, girls = girls_age)), c('age', 'group'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...