2015-12-30 2 views
0

enter image description hereПреобразования долго широкоэкранного

Хочет, чтобы преобразовать данные из длинного формата в широкий формат. В целом для ColA необходимо иметь только одну строку. Будут дубликаты в ColB для ColE в тех случаях, когда я пытаюсь объединить их по счету. ColF агрегируется суммой().

s <- read_csv("sample.csv") 
s_1 <- subset(s, select=c("ColA", "ColF")) 
grp_by <- aggregate(. ~ ColA , data = s_1, FUN = sum) 
head(grp_by) 

Не знает, как преобразовать остальные столбцы

Update: на основе предложений, выдвинутое использовании reshape2 пакета

library(reshape2) 

s <- read_csv("sample.csv") 
s_1 <- subset(s, select=c("ColA", "ColF")) 
grp_by <- aggregate(. ~ ColA , data = s_1, FUN = sum) 

s2 <- dcast(s, ColA ~ ColB) 
s3 <- dcast(s, ColA ~ ColC) 
s4 <- dcast(s, ColA ~ ColD) 
s5 <- dcast(s, ColA ~ ColE) 

print(s2) 
print(s3) 
print(s4) 
print(s5) 
print(grp_by) 

Это выход из этих заявлений для печати.

enter image description here

Как я мог объединить всех тех, кто в один кадр данных? Мой фактический набор данных - 1 миллион записей. Является ли этот код оптимальным для работы поверх него или есть лучший способ его записи. Спасибо за вашу помощь.

+3

Посмотрите здесь http://stackoverflow.com/questions/ 5890584/reshape-data-from-long-to-wide-format-r –

+0

@DavidArenburg Than ks для вашего предложения. Обновлен вопрос после использования reshape2. Не могли бы вы проверить вопрос еще раз и вести меня соответствующим образом. Благодарю. – prasanth

+1

См. Здесь, как обеспечить воспроизводимый пример и желаемый результат. Http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

ответ

0

Это пример кода, который я использовал для преобразования и объединения данных. Там может быть какой-то лучший способ, но это лучшее, что я мог бы придумать.

# Include needed libraries 
library(reshape2) 

# Load the sample data 
s <- read_csv("sample.csv") 

# Aggregate ColF by SUM for each ColA 
s_1 <- subset(s, select=c("ColA", "ColF")) 
grp_by <- aggregate(. ~ ColA , data = s_1, FUN = sum) 

# Long to Wide format 
s2 <- dcast(s, ColA ~ ColB) 
s3 <- dcast(s, ColA ~ ColC) 
s4 <- dcast(s, ColA ~ ColD) 
s5 <- dcast(s, ColA ~ ColE) 

# But this is the crude way of removing NA columns which I used! 
# Rename the NA column into something so that it can be removed by assigning NULL!! 
colnames(s2)[7] <- "RemoveMe" 
colnames(s3)[5] <- "RemoveMe" 
colnames(s4)[5] <- "RemoveMe" 
colnames(s5)[4] <- "RemoveMe" 

s2$RemoveMe <- NULL 
s3$RemoveMe <- NULL 
s4$RemoveMe <- NULL 
s5$RemoveMe <- NULL 

# Merge all pieces to form the final transformed data 
s2 <- merge(x = s2, y = s3, by="ColA", all = TRUE) 
s2 <- merge(x = s2, y = s4, by="ColA", all = TRUE) 
s2 <- merge(x = s2, y = s5, by="ColA", all = TRUE) 
s2 <- merge(x = s2, y = grp_by, by="ColA", all = TRUE) 

# Removing the row with user_id = NA!! 
s2 <- s2[-c(4), ] 

# Final transformed data 
print(s2) 

Используется их в качестве справки:

  1. dcast - How to reshape data from long to wide format?
  2. слияния - How to join (merge) data frames (inner, outer, left, right)?
Смежные вопросы