Re: [問題] 多個檔案合併 取聯集

作者: kenshin528 (成立奧凶帝國!!)   2014-07-10 00:55:51
這邊我是用"reshape"這個套件做的
file_1 <- data.frame(name=c("A","B","D"),value=c(23,45,100),day="day1")
file_2 <- data.frame(name=c("A","C","D"),value=c(77,11,35),day="day2")
file_3 <- data.frame(name=c("B","D","E"),value=c(11,44,55),day="day3")
#首先我們需要重新整理一下資料型態,把資料變成
#file_1
#name value day
#A 23 day1
#B 45 day1
#D 100 day1
#這樣的形態
x <- rbind(file_1,file_2,file_3)
#再來把三個資料合在一起
name day1 day
1 A 23 day1
2 B 45 day1
3 D 100 day1
4 A 77 day2
5 C 11 day2
6 D 35 day2
7 B 11 day3
8 D 44 day3
9 E 55 day3
library("reshape")
呼叫reshape套件
result<- cast(x,name~day,value=c("value"))
#之後轉置DATA
#結果變這樣
name day1 day2 day3
1 A 23 77 NA
2 B 45 NA 11
3 D 100 35 44
4 C NA 11 NA
5 E NA NA 55
應該也算符合您的需求吧 ?
※ 引述《celestialgod (攸藍)》之銘言:
: 大概寫了一下,長這樣,哪裏有問題,請務必告知我,謝謝
: 其他大大或是有更好的方法,我用比較笨的方法硬幹QQ
: working_path = "the directory of your file"
: setwd(working_path)
: file_list = dir()[grepl("txt", dir())]
: dat_list = lapply(1:length(file_list), function(l){
: dat = read.table(l, header = TRUE)
: dat = data.frame(cate = row.names(dat), dat)
: dat
: })
: output_table = merge(dat_list[[1]], dat_list[[2]], by = "cate", all = TRUE)
: if(length(dat_list) >= 3)
: {
: for (i in 3:length(dat_list))
: output_table = merge(temp, dat_list[[i]], by = "cate", all = TRUE)
: }
: output_table[which(is.na(output_table))] = 0
: ※ 引述《iterate (碎形)》之銘言:
: : ctrl + y 可以刪除一整行,請將不需要的內容刪除
: : 文章分類提示:
: : - 問題: 多個檔案合併時,取聯集。範例如下。
: : [問題類型]:
: : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
: : [軟體熟悉度]:
: : 請把以下不需要的部份刪除
: : 入門(寫過其他程式,只是對語法不熟悉)
: : [問題敘述]:
: : 請簡略描述你所要做的事情,或是這個程式的目的
: : file_1:
: : day1
: : A 23
: : B 45
: : D 100
: : file_2:
: : day2
: : A 77
: : C 11
: : D 35
: : file_3:
: : day3
: : B 11
: : D 44
: : E 55
: : 希望能合併成下表:
: : day1 day2 day3
: : A 23 77 0
: : B 45 0 11
: : C 0 11 0
: : D 100 35 44
: : E 0 0 55
: : [程式範例]: 無
: [關鍵字]: merge, dir, grepl
作者: celestialgod (天)   2014-07-10 10:20:00
推,大大的方法更好

Links booklink

Contact Us: admin [ a t ] ucptt.com