2015-12-02 18 views
1

我有一個看起來類型的數據幀是這樣的:如何通過所有列循環,並比較特定列和情節頻率讀取出局

y<-c("A1","B1", "C2", "A1", "B1","C1", "A1","B2", "C3", "A1", "B1", "C4", "A1", "B1","C4", "A1","B2", "C4", "A1","B1", "C4", "A1", "B1", "C4") 
test<- data.frame(matrix(y, nrow = 3, ncol = 8)) 
colnames(test) <- c("Learn_1", "Car_1", "Car_2", "Fan_1", "Fan_2", "Fan_3","Kart_1", "God_1") 
test 

Learn_1 Car_1 Car_2 Fan_1 Fan_2 Fan_3 Kart_1 God_1 
1  A1 A1 A1 A1 A1 A1  A1 A1 
2  B1 B1 B2 B1 B1 B2  B1 B1 
3  C2 C1 C3 C4 C4 C4  C4 C4 

我的真實數據有不等長和數以千計的13列的行和值混在一起。我想確定God_1中每個值到所有其他列的頻率,但是對於每個具有相同字的列(意味着列來自同一研究)(即,列和Fan將數值頻率計爲1,如果該值顯示在這些列中不止一次,然後我想繪出在GOD_1中可用值的總百分比(100%)上顯示5,4,3,2,1的值的百分比。總數值,然後是不同的百分比陰影區分頻率值(1,2,3,4,5)。我的陰謀應該有最小1和最大5(有5個獨特的列字)。

我的問題是,我不知道如何開始這個,但在過去的幾天思考這個。想法任何人?

這些頻率多少次y根據我想要的東西顯示:

A1 = 5 
B1 = 5 
C4 = 3 

這裏是我的例子,我的真實數據看起來像這樣,但有2366 obs。 13個變量,各個係數w /一些數量的級別(範圍從200:3000)

str(test) 
'data.frame': 3 obs. of 8 variables: 
$ Learn_1: Factor w/ 3 levels "A1","B1","C2": 1 2 3 
$ Car_1 : Factor w/ 3 levels "A1","B1","C1": 1 2 3 
$ Car_2 : Factor w/ 3 levels "A1","B2","C3": 1 2 3 
$ Fan_1 : Factor w/ 3 levels "A1","B1","C4": 1 2 3 
$ Fan_2 : Factor w/ 3 levels "A1","B1","C4": 1 2 3 
$ Fan_3 : Factor w/ 3 levels "A1","B2","C4": 1 2 3 
$ Kart_1 : Factor w/ 3 levels "A1","B1","C4": 1 2 3 
$ God_1 : Factor w/ 3 levels "A1","B1","C4": 1 2 3 
+1

你知道列前的名字嗎?或者它是動態的和未知的,這取決於你正在拉動的數據 –

+0

嗨Road_to_quandom,所有列名都在手前已知 – Chad

回答

2

我們可以使用dplyrtidyr

首先數據是gather ED寬格式,然後我們從標籤separate數字部分,使用distinct刪除重複,算上所有的occurances,並使用left_join只能看着那些人在God_1列。

library(dplyr) 
library(tidyr) 
dat %>% gather(key, val) %>% 
     separate(key, c("id", "num")) %>% 
     distinct(id, val) %>% 
     count(val) %>% 
     left_join(dat["God_1"], ., by = c(God_1 = "val")) 



Source: local data frame [3 x 2] 

    God_1 out 
    (fctr) (dbl) 
1  A1  5 
2  B1  5 
3  C4  3 
+0

Jeremy,這是一個很好的嘗試,但是我使用的是飛行基因(FBgn0000045),這個出現了4次,我NA – Chad

+0

@Chad嘗試將sum(God_1 == val)'改爲'sum(God_1 == val,na.rm = TRUE)'如果這樣做不行,請嘗試更新您的問題,工作。 – jeremycg

+0

Jeremy這個修復了它的一部分,它仍然不會給我正確的freq字符值在每個數據集中被複制。我認爲問題是我的例子是乾淨的,並不是所有的搞砸了,這意味着A1可以在任何行中並且需要匹配A1是在指定列 – Chad