频率分布中的R

问题描述:

对不起,如果这是一个基本的问题,但是否有可能创建一个数据表像的频率分布:频率分布中的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

扩大对我的评论,让我们先从一些重复的样品数据:

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

我希望我理解你的问题的权利

# 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

使用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