2016-09-30 2 views
4

В упражнении, я должен создать кадр данных, как это:Как создать кадр R данных построчно

Name <- c("Sam","Frank","Amy") 
Age <- c(22,25,26) 
Weight <- c(150,165,120) 
Sex <- c("M", "M", "F") 
df <- data.frame (row.names = Name, Age, Weight, Sex) 

Поэтому в основном я создаю столбцы, а затем кадр данных на основе этих столбцов.

Что делать, если у меня есть следующие векторы, и я хотел бы создать один и тот же фрейм данных? Есть ли способ?

Sam <- c(22,150, 'M') 
Frank <- c(25, 165, 'M') 
Amy <- c(26, 120, 'F') 

Благодаря

+1

Проблема: 'с (22, 150, 'M')' преобразует числа в строки: вектор может быть только один "класс" data, поэтому 'logical r2evans

ответ

3

Попробуйте это:

df <- as.data.frame(rbind(Sam, Frank, Amy), stringsAsFactors = FALSE) 
names(df) <- c('Age' , 'weight', 'Sex') 

df 
     Age Weight Sex 
Sam 22 150 M 
Frank 25 165 M 
Amy 26 120 F 

Если вы беспокоитесь о типе переменных можно дополнительно сделать преобразование:

df$Age <- as.integer(df$Age) 
df$weight <- as.integer(df$weight) 
df$Sex <- as.factor(df$Sex) 

Или мы можем использовать type.convert:

df <- data.frame(lapply(df, type.convert)) 
+0

Можете ли вы включить вывод 'str (df)'? Я предполагаю, что это не будет то, что предназначено («Возраст» и «Вес» будут факторами, а не цифрами). – r2evans

+0

Я вижу, что вы говорите, обновляется, это должно работать –

+0

Поскольку stringsAsFactors = FALSE была выполнена, эта переменная была символом (а не фактором), теперь, если мы хотим, чтобы он был фактором, нам нужно принудить его к коэффициенту. –

0

Вот вариант с использованием transpose и mget

nm1 <- c("Sam", "Frank", "Amy") 
`row.names<-`(data.frame(setNames(lapply(data.table::transpose(mget(nm1)), 
      type.convert), c("Age", "Weight", "Sex"))), nm1) 
     Age Weight Sex 
# Sam 22 150 M 
# Frank 25 165 M 
# Amy 26 120 F 
Смежные вопросы