如何计算以R中的序列开头的数据帧中的单元格百分比?

时间:2015-08-02 19:55:09

标签: r dataframe percentage

我的数据看起来像:

Row 1     Row 2     Row 3     Row 4     Row 5     Row 6     Row7
abc89     abc62     67        abc513    abc512    abc81     abc10
abc6      pop       abc11     abc4      giant     13        abc15
abc90     abc16     abc123    abc33     abc22     abc08     9
111       abc15     abc72     abc36     abc57     abc9      abc55

我想计算以" abc"开头的数据框中的单元格百分比。例如:这里总共有28个单元格。这可以通过prod(dim(df))获得。所以我需要以" abc"开头的#单元格。然后除以prod(dim(df))。答案是0.785。怎么能在R?

中完成

2 个答案:

答案 0 :(得分:4)

我会用:

> mean(grepl("^abc",unlist(dat)))
[1] 0.7857143

使用mean表示您不必单独获取分子和分母。 greplgrep的逻辑版本 - 只要找到TRUE(即以"^abc"开头的字符串),它就会返回abcRecall伯努利向量的平均值是成功的百分比。

如果您想按行或按列执行此操作,请使用apply,例如apply(dat,1,function(x)mean(grepl("^abc",x)))获得行方式。

答案 1 :(得分:2)

您可以使用grep搜索感兴趣的模式(以“abc”开头的字符串):

length(grep("^abc", as.character(unlist(dat)))) / prod(dim(dat))
# [1] 0.7857143

您可以通过以下方式获取行计数:

(row.counts <- apply(dat, 1, function(x) length(grep("^abc", as.character(x)))))
# [1] 6 4 6 6

数据:

dat = read.table(text="Row1     Row2     Row3     Row4     Row5     Row6     Row7
 abc89     abc62     67        abc513    abc512    abc81     abc10
 abc6      pop       abc11     abc4      giant     13        abc15
 abc90     abc16     abc123    abc33     abc22     abc08     9
 111       abc15     abc72     abc36     abc57     abc9      abc55", header=TRUE)