2015-10-29 2 views
1

Я хочу установить уровни столбца в виде новых строк в фрейме данных. Проблема в том, что значение присваивается этим уровням в другом столбце, и я не хочу, чтобы они были потеряны. Похоже, что некоторые строки имеют одинаковое имя для двух уровней, поэтому я хотел бы сохранить уровни до столбцов и получить уникальную строку для предыдущих дубликатов. Вот мой пример.Как изменить уровни столбцов в виде новых строк в кадре данных без потери значений другого столбца?

> shall.will.table<-read.table(choose.files(), header=T, sep="\t", comment.char="") # loads 1000 observations of 3 variables 
> attach(shall.will.table) 
> head(shall.will.table) 
    CX VERB FREQ 
1 shall  be 4414 
2 shall have 1354 
3 shall see 1131 
4 shall  go 521 
5 shall  do 482 
6 shall take 356 

> ordering.index<-order(VERB, CX) 
> shall.will.table.2<-shall.will.table[ordering.index,] 
> head(shall.will.table.2) 
     CX  VERB FREQ 
912 will  abandon 43 
384 shall  abide 4 
896 will  abolish 47 
104 shall  accept 24 
565 will  accept 524 
171 shall accompany 14 

Выход я хотел бы получить должен выглядеть в следующей таблице, но не проходя через следующие этапы:

> VERB<-c("abandon", "abide", "abolish", "accept", "accompany") 
> shall<-c(0, 4, 0, 24, 14) 
> will<-c(43, 0, 47, 524, 0) 
> shall.will.table.3<-data.frame(VERB, shall, will) 
> shall.will.table.3 
     VERB shall will 
1 abandon  0 43 
2  abide  4 0 
3 abolish  0 47 
4 accept 24 524 
5 accompany 14 0 

Кто-нибудь может мне помочь?

Благодарим вас заранее.

ответ

1

Или вы можете использовать reshape2 пакет,

require(reshape2) 
dcast(shall.will.table.2, VERB~CX, value.var = "FREQ", fill=0) 

Это, вероятно, лучше не назначать fill аргумента, если у вас нет явной причины.

0

Вы можете попробовать использовать пакет tidyr, а также функцию spread. это будет конвертировать ваши длинные данные в широкие данные:

library(tidyr) 
shall.will.table %>% spread(CX, FREQ, fill = 0) 

     VERB shall will 
1 abandon  0 43 
2  abide  4 0 
3 abolish  0 47 
4 accept 24 524 
5 accompany 14 0 
+0

Отлично! Он работает отлично. Большое спасибо! – CBechet

Смежные вопросы