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