2011-10-14 20 views
6

मैं एक बड़ी सूची है, लेकिन सूक्ष्म उदाहरण की तरह होगा निम्नलिखित:मर्ज दो सूची घटकों

A <- c("A", "a", "A", "a", "A") 
B <- c("A", "A", "a", "a", "a") 
C <- c(1, 2, 3, 1, 4) 
mylist <- list(A=A, B=B, C= C) 

उम्मीद उत्पादन बी के साथ एक विलय इतना है कि प्रत्येक घटक अटल बिहारी

तरह
AA, aA, Aa, aa, Aa 
दिखेगा

बेहतर हल कर दिया जाना चाहिए, अपर केस हमेशा पहले

AA, Aa, Aa, aa, Aa 

इस प्रकार नई सूची या मैट्रिक्स दो कॉलम होना चाहिए या पंक्तियों: - "ए.ए.", "आ", और "आ"

सरल लगता है, लेकिन मैं आसानी से समझ नहीं सकता

AA, Aa, Aa, aa, Aa 
1, 2, 3, 1, 4 

अब मैं सी की औसत वर्ग के आधार पर की गणना करना चाहते हैं।

उत्तर

2
> (ab <- paste(A, B, sep="")) 
[1] "AA" "aA" "Aa" "aa" "Aa" 
> (ab <- paste(A, B, sep="")) # the joining step 
[1] "AA" "aA" "Aa" "aa" "Aa" 
> (ab <- sub("([a-z])([A-Z])", "\\2\\1", ab)) # swap lowercase uppercase 
[1] "AA" "Aa" "Aa" "aa" "Aa" 

> rbind(ab, C)     # matrix 
    [,1] [,2] [,3] [,4] [,5] 
ab "AA" "Aa" "Aa" "aa" "Aa" 
C "1" "2" "3" "1" "4" 
> data.frame(alleles=ab, count=C) # dataframes are lists 
    alleles count 
1  AA  1 
2  Aa  2 
3  Aa  3 
4  aa  1 
5  Aa  4 
2

मैं यह कर सकता अपने डेटा एक data.frame में व्यवस्थित किया जाता है, तो पैकेज plyr

> A <- c("A", "a", "A", "a", "A") 
> B <- c("A", "A", "a", "a", "a") 
> C <- c(1, 2, 3, 1, 4) 
> groups <- sort(paste(A, B, sep="")) 
[1] "AA" "aA" "Aa" "aa" "Aa" 
> my.df <- data.frame(A=A, B=B, C=C, group=groups) 

> require(plyr) 
> result <- ddply(my.df, "group", transform, group.means=mean(C)) 
> result[order(result$group, decreasing=TRUE),] 
    A B C group group.means 
5 A A 1 AA   1.0 
3 A a 3 Aa   3.5 
4 A a 4 Aa   3.5 
2 a A 2 aA   2.0 
1 a a 1 aa   1.0 
1
अपने डेटा के साथ

का उपयोग कर:

A <- c("A", "a", "A", "a", "A") 
B <- c("A", "A", "a", "a", "a") 
C <- c(1, 2, 3, 1, 4) 

मैं एक data.frame एक के संयोजन का उपयोग कर परिभाषित और बी कुंजी कॉलम के रूप में:

AB <- paste(A, B, sep='') 
df <- data.frame(id=AB, C=C) 

> df 
    id C 
1 AA 1 
2 aA 2 
3 Aa 3 
4 aa 1 
5 Aa 4 

आप तो एकत्रीकरण से पहले इस data.frame ऑर्डर करने के लिए की जरूरत है:

df <- df[order(AB, decreasing=TRUE),] 

> df 
    id C 
1 AA 1 
3 Aa 3 
5 Aa 4 
2 aA 2 
4 aa 1 

और aggregate साथ आप मतलब प्रत्येक id के लिए गणना:

meanDF <- aggregate(C~id, data=df, mean) 

> meanDF 

    id C 
1 aa 1.0 
2 aA 2.0 
3 Aa 3.5 
4 AA 1.0 

लेकिन आप एकत्रीकरण के बाद ऑर्डर करने के लिए चाहते हैं, फिर:

df <- data.frame(id=AB, C=C) 
meanDF <- aggregate(C~id, data=df, mean) 
meanDF <- meanDF[order(meanDF$id, decreasing=TRUE),] 
संबंधित मुद्दे