2013-06-18 24 views
12

से मैं कैसे आरआर - लापता मूल्यों के साथ एक डेटा फ्रेम में डेटा फ्रेम की एक सूची विलय पंक्ति

में एक साथ विलय करने के लिए चीजों की ओह-तो-आम समस्या पर एक बदलाव है मैं का एक सेट है एक विशेष फ़ोल्डर में .txt फ़ाइलें, और मैं एक समारोह है कि लिखा है:

  • फ़ाइलें मैं चाहता हूँ की एक सूची बना देता है, और उसके बाद प्रत्येक फ़ाइल
  • के लिए करने के लिए फ़ाइल पढ़ता
  • सबसेट डेटा (केवल पंक्तियों और ब्याज के कॉलम निकालें)
  • डेटा पर कुछ गणना
  • इन नए मानों को एक सूची में जोड़ती है।

क्या मैं के साथ खत्म निम्नलिखित संरचना के साथ एक सूची है:

>str(DataList) 
List of 16 
$ :'data.frame': 14 obs. of 2 variables: 
    ..$ Sample: Factor w/ 14 levels "Sample_1A","Sample_1B",..: 1 2 3 4 5 6 7 8 9 10 ... 
    ..$ Var1 : num [1:14] 27.9 33.8 29.9 29.4 28.8 ... 
$ :'data.frame': 14 obs. of 2 variables: 
    ..$ Sample: Factor w/ 14 levels "Sample_1A","Sample_1B",..: 1 2 3 4 5 6 7 8 9 10 ... 
    ..$ Var2 : num [1:14] 24.6 27 26.8 26.7 27.2 ... 
$ :'data.frame': 12 obs. of 2 variables: 
    ..$ Sample: Factor w/ 14 levels "Sample_1A","Sample_1B",..: 1 2 3 4 5 6 7 9 11 12 ... 
    ..$ Var3 : num [1:12] 31.4 35.6 34 35.7 32.5 ... 

प्रत्येक चर के लिए (Var1, Var2, Var3, ...) मैं एक स्तंभ Sample और संख्यात्मक मानों का एक स्तंभ है।

Sample हमेशा 14 स्तरों वाला एक कारक है; ये चर प्रत्येक चर के लिए समान हैं।

समस्या यह है कि कुछ चर (जैसे Var3 ऊपर) Sample के प्रत्येक स्तर के लिए अवलोकन नहीं है।

जो मैं समाप्त करना चाहता हूं वह 14 पंक्तियों वाला डेटा फ्रेम है (Sample के प्रत्येक स्तर के लिए एक)। पहला कॉलम Sample होना चाहिए; फिर प्रत्येक चर के लिए, वहाँ इसी संख्यात्मक मानों युक्त एक स्तंभ है, इसलिए की तरह होना चाहिए:

Sample  Var1 Var2 Var3 
Sample_1A 27.9 24.6 31.4 
Sample_1B 33.8 27  35.6 
... 
Sample_3B 26.8 29.7 NA 

मैं do.call के साथ ऐसा करने की कोशिश कर रहा है, लेकिन कैसे by के लिए बहस पारित करने के लिए पता नहीं है; cbind गुम मूल्यों के कारण नाखुश हो जाता है। यह कैसे करें इस पर कोई विचार?

धन्यवाद!

संपादित करें: Joran के अनुरोध के अनुसार:

>dput(DataList[1:3]) 
list(structure(list(Sample = structure(1:14, .Label = c("Sample_1B", "Sample_1C", "Sample_1D", "Sample_2C", "Sample_2A", "Sample_2D", "Sample_3B", "Sample_3C", "Sample_3A", "Sample_3D", "Sample_4B", "Sample_4C", "Sample_4A", "Sample_4D"), class = "factor"), Var1 = c(26.9333333333333, 29.17, 28.9366666666667, 28.9233333333333, 28.61, 28.63, 26.7933333333333, 34.6633333333333, 30.4966666666667, 28.4433333333333, 27.4533333333333, 28.3, 27.9633333333333, 27.2366666666667)), .Names = c("Sample", "Var1"), row.names = c(NA, -14L), class = "data.frame"), structure(list(Sample = structure(1:14, .Label = c("Sample_1B", "Sample_1C", "Sample_1D", "Sample_2C", "Sample_2A", "Sample_2D", "Sample_3B", "Sample_3C", "Sample_3A", "Sample_3D", "Sample_4B", "Sample_4C", "Sample_4A", "Sample_4D"), class = "factor"),          Var2 = c(24.19, 26.6033333333333, 26.0366666666667, 27.6766666666667, 27.61, 27.5633333333333, 25.1566666666667, 33.7266666666667, 27.7, 26.1466666666667, 25.65, 26.3633333333333, 25.5333333333333, 26.1733333333333)), .Names = c("Sample", "Var2"), row.names = c(NA, -14L), class = "data.frame"), structure(list(Sample = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 9L, 11L, 12L, 13L, 14L), .Label = c("Sample_1B", "Sample_1C", "Sample_1D", "Sample_2C", "Sample_2A", "Sample_2D", "Sample_3B", "Sample_3C", "Sample_3A", "Sample_3D", "Sample_4B", "Sample_4C", "Sample_4A", "Sample_4D"), class = "factor"), Var3 = c(31.4133333333333, 35.56, 33.9666666666667, 35.66, 32.4633333333333, 31.99, 31.3133333333333, 36.34, 34.9433333333333, 34.5433333333333, 34.3766666666667, 33.28)), .Names = c("Sample", "Var3"), row.names = c(NA, -12L), class = "data.frame")) 
+3

क्या आप कृपया 'ड्यूटी (डेटालिस्ट [1: 3]) के आउटपुट प्रदान कर सकते हैं? – joran

+1

संभावित डुप्लिकेट [आर: बहुत सारे डेटा.फ्रेम विलय] (http://stackoverflow.com/questions/14096814/r-merging-a-lot-of-data-frames) –

+1

संभावित डुप्लिकेट [एकाधिक डेटा मर्ज करें एक साथ सूची में फ्रेम] (http://stackoverflow.com/questions/8091303/merge-multiple-data-frames-in-a-list- इसके साथ-साथ) –

उत्तर

25

Reduce लिए एक पाठ्यपुस्तक उपयोग के मामले की तरह लग रहा।

merge.all <- function(x, y) { 
    merge(x, y, all=TRUE, by="Sample") 
} 

output <- Reduce(merge.all, DataList) 
+0

बिल्कुल सही, धन्यवाद! – phosphorelated

संबंधित मुद्दे