2013-12-09 99 views
0

對不起,如果這是一個基本的問題,但是否有可能創建一個數據表像的頻率分佈:頻率分佈中的R

   Town 1  Town 1  Town 2  Town 2  Town 3 
Fish   Yes   Yes   Yes  No   No 
Crops   No    No   Yes  No   Yes 
Livestock  Yes   Yes   No  No   Yes 

如果頻率分佈顯示的頻率每個地方每個變量?

編輯

謝謝那些誰回答,你是對的,這是更好,如果我把一些實際數據。 好的,這與我的原始數據非常接近。正如你所看到的,城鎮並不是獨一無二的(因爲這來自對城鎮居民的調查)。所以我希望將每個產品(魚,作物,牲畜等)的頻率總結在每個城鎮上,並最終將其繪製成餅圖/直方圖。

喜歡的東西:

   Town 1  Town 2  Town 3 
Fish    2   1   0 
Crops   0   1   1 
Livestock  2   0   1 

雖然我認爲這將顯示爲百分比更好?無論如何,感謝你給我的任何幫助,我不認識任何有經驗的人,所以我盲目地迴避。

+0

您是否在尋找像'庫(reshape2); data.frame(table(melt(as.matrix(mydf))))'或'library(reshape2);表(熔化(as.matrix(mydf)))'也許?如果你可以編輯你的問題,以這個小例子來顯示你想要的輸出,那將是一件好事。 – A5C1D2H2I1M1N2O1R2T1

+0

是的,謝謝@AnandaMahto的評論,我編輯了數據!即使使用重複的列名稱也會重新工作嗎? – James

回答

1

擴大對我的評論,讓我們先從一些重複的樣品數據:

mydf <- data.frame(item = c("fish", "crops", "ls"), 
        T1 = c("Y", "N", "Y"), 
        T1 = c("Y", "N", "Y"), 
        T2 = c("Y", "Y", "N"), 
        T2 = c("N", "N", "N"), 
        T3 = c("N", "Y", "Y"), check.names = FALSE) 
mydf 
# item T1 T1 T2 T2 T3 
# 1 fish Y Y Y N N 
# 2 crops N N Y N Y 
# 3 ls Y Y N N Y 

melt來自「reshape2」不會很好地與重複的列名稱一起工作,所以先讓它們唯一。

names(mydf) <- ave(names(mydf), names(mydf), 
        FUN = function(x) paste0(x, "_", seq_along(x))) 

現在,進行類似於我曾建議:

library(reshape2) 
x <- melt(mydf, id.vars="item_1") ## Melt the dataset 
xY <- x[x$value == "Y", ]   ## Subset just "Y" values 
## Tabulate 
table(xY$item_1, sapply(strsplit(as.character(xY$variable), "_"), "[[", 1)) 
#   
#   T1 T2 T3 
# crops 0 1 1 
# fish 2 1 0 
# ls  2 0 1 
+0

謝謝@AnandaMahto !!!這對我有用!感謝您幫助我弄清楚如何處理重複的名稱。 – James

+0

@James,'table'的輸出已經是一個'matrix',所以將表的輸出分配給一個對象,比如說「tableout」,然後使用'barplot(tableout,beside = TRUE)'。 – A5C1D2H2I1M1N2O1R2T1

+0

好吧,現在就明白了,謝謝! – James

1

我希望我理解你的問題的權利

# constructing your data frame 
df <- data.frame(v1=c(1,0,1),v2=c(0,0,1),v3=c(1,1,0)) 
rownames(df) <- c('p1','p2','p3') 

# calculating the distributions 
t(t(df)/apply(df,2,sum)) 
+0

該死的對不起,我忘記了我的數據框是在Yes/No。這仍然有可能嗎? – James

+0

你的意思是他們被保存爲TRUE/FALSE?在這種情況下,它的工作原理我認爲。對於'sum',TRUE轉換爲1,FALSE轉換爲0. –

+0

奇怪的是,它們只保存爲字符。有沒有辦法將它們轉換爲TRUE/FALSE因素? – James

1

使用table

set.seed(1) 
dat <- table(paste('Place',sample(1:3,10,rep=T),sep='_'), 
     paste('Variable',sample(1:3,10,rep=T),sep='_')) 

      Variable_1 Variable_2 Variable_3 
    Place_1   1   0   2 
    Place_2   1   1   2 
    Place_3   0   2   1 

編輯

ifelse(dat>0,'Yes','No') 

     Variable_1 Variable_2 Variable_3 
    Place_1 "Yes"  "No"  "No"  
    Place_2 "Yes"  "Yes"  "Yes"  
    Place_3 "Yes"  "No"  "Yes"  
+0

很抱歉,忘記我的數據是在/是的答案。我已經編輯了原始問題 – James

+0

@James我編輯我的答案。但是你應該編輯你的答案並舉例說明你的輸入數據(Variable's,Places's,..) – agstudy

+0

嗨@agstudy請參閱編輯! – James