R литье из расплава

У меня есть файл с таким содержимым:

name: erik
age: 7
score: 10
name: stan
age:8
score: 11
name: kyle 
age: 9
score: 20
...

Как видите, каждая запись фактически содержит 3 строки в файле. Мне интересно, как я могу прочитать файл и преобразовать его в фреймворк данных, как показано ниже:

name    age    score
erik    7      10
stan    8      11
kyle    9      20
...

Что я сделал до сих пор (спасибо tcash21):

> data <- read.table(file.choose(), header=FALSE, sep=":", col.names=c("variable", "value"))
> data
variable  value
1     name   erik
2      age      7
3    score     10
4     name   stan
5      age      8
6    score     11
7     name  kyle 
8      age      9
9    score     20

Я думаю, как я могу разделить столбец на два столбца с помощью :, а затем, возможно, использовать что-то похожее, например, cast в пакете изменения формы, чтобы делать то, что я хочу? или как я могу получить только строки с номером индекса 1,4,7,..., которые имеют постоянный шаг

Спасибо!


person B.Mr.W.    schedule 11.11.2013    source источник
comment
Сначала вы должны прочитать свой файл, используя read.table и sep=":", чтобы у вас была каждая переменная в 2 отдельных столбцах.   -  person tcash21    schedule 12.11.2013
comment
Используйте ?strsplit, чтобы разделить, а затем расплавить.   -  person zx8754    schedule 12.11.2013


Ответы (2)


Другая возможность:

library(reshape2)
df$id <- rep(1:(nrow(df)/3), each = 3)
dcast(df, id ~ variable, value.var = "value")

#   id age  name score
# 1  1   7  erik    10
# 2  2   8  stan    11
# 3  3   9  kyle    20
person Henrik    schedule 11.11.2013

Если формат предсказуем, вы можете сделать что-то действительно простое, например

# recreate data
data <- as.matrix(c("erik",7,10,"stan",8, 11,"kyle",9,20),ncol=1)

# get individual variables
names <- data[seq(1,length(data)-2,3)]
age <- data[seq(2,length(data)-1,3)]
score <- data[seq(3,length(data),3)]

# combine variables
reformatted.data <- as.data.frame(cbind(names,age,score))
person Josh    schedule 11.11.2013