การรวมกรอบข้อมูลใน R

สมมติว่าฉันมีเฟรมข้อมูลสองเฟรม แต่ละคอลัมน์มีคอลัมน์ DAY, MONTH และ YEAR พร้อมด้วยตัวแปร C และ P ตามลำดับ ฉันต้องการรวมเฟรมข้อมูลทั้งสองเข้าด้วยกันในสองวิธีที่แตกต่างกัน ก่อนอื่น ฉันรวมข้อมูลเข้าด้วยกัน:

test<-merge(data1,data2,by.x=c("DAY","MONTH","YEAR"),by.y=c("DAY","MONTH","YEAR"),all.x=T,all.y=F)

มันทำงานได้อย่างสมบูรณ์แบบ การรวมครั้งที่สองคือสิ่งที่ฉันประสบปัญหา ดังนั้น ขณะนี้ฉันได้รวมค่าสำหรับวันที่ 5 มกราคม 1996 จาก data1 และค่าสำหรับวันที่ 5 มกราคม 1996 จาก data2 ลงในเฟรมข้อมูลเดียว แต่ตอนนี้ฉันต้องการรวมค่าที่สามลงในแต่ละแถวของกรอบข้อมูลใหม่ โดยเฉพาะ ฉันต้องการรวมค่าสำหรับวันที่ 4 มกราคม 1996 จาก data2 กับสองค่าตั้งแต่วันที่ 5 มกราคม 1996 มีเคล็ดลับในการผสานให้มีความยืดหยุ่นในลักษณะนี้หรือไม่

ข้อมูลตัวอย่าง:

data1
C DAY MONTH YEAR
1   1     1 1996
6   5     1 1996
5   8     1 1996
3  11     1 1996
9  13     1 1996
2  14     1 1996
3  15     1 1996
4  17     1 1996    

data2
P DAY MONTH YEAR
1   1     1 1996
4   2     1 1996
8   3     1 1996
2   4     1 1996
5   5     1 1996
2   6     1 1996
7   7     1 1996
4   8     1 1996
6   9     1 1996
1  10     1 1996
7  11     1 1996
3  12     1 1996
2  13     1 1996
2  14     1 1996
5  15     1 1996
9  16     1 1996
1  17     1 1996

person Jota    schedule 26.01.2012    source แหล่งที่มา
comment
มันยากที่จะพูดโดยไม่มีรายละเอียดเพิ่มเติมเกี่ยวกับวันที่ที่คุณกำลังเผชิญอยู่ คุณอาจแปลงเป็นวันที่แล้วเป็นตัวเลขแล้วปัดเศษให้ใกล้เคียงกันก็ได้... หรือถ้าคุณมีวันเดียวต่อเดือน ให้รวมเฉพาะเดือนและปีเท่านั้น... คุณช่วยยกตัวอย่างหน่อยได้ไหม ข้อมูลเพื่อให้เราเห็นว่าคุณกำลังทำอะไรอยู่? นอกจากนี้ คุณไม่จำเป็นต้องระบุ by.x และ by.y merge จะค้นหาคอลัมน์ที่ตรงกันและรวมเข้าด้วยกัน   -  person Justin    schedule 26.01.2012


คำตอบ (1)


สร้างคอลัมน์ใหม่ที่เป็นประเภทวันที่ ไม่ใช่เฉพาะจำนวนเต็มวัน เดือน ปี คุณสามารถใช้ as.Date() เพื่อทำสิ่งนี้ แต่คุณจะต้องค้นหารูปแบบที่ถูกต้องของอาร์กิวเมนต์ format= ที่กำหนดให้กับสตริงของคุณ ลองเรียกคอลัมน์นั้นว่า D1 ตอนนี้ทำ data1$D2 = data1$D1 + 1 จุดสำคัญที่นี่คือประเภทวันที่อนุญาตให้ใช้การคำนวณวันที่แบบง่าย ตอนนี้เพียงผสานด้วย x=D1 และ y=D2

ในกรณีที่ทำให้เกิดความสับสน ประเด็นสำคัญคือคุณต้องแปลงคอลัมน์ของคุณให้เป็นประเภทวันที่ เพื่อที่คุณจะได้คำนวณวันที่ได้

person frankc    schedule 26.01.2012