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

How to calculate percentage of cells in data frame that start with sequence in R?

我的数据如下:

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 中完成?

您可以使用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)

我会使用:

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

使用mean意味着您不必自己分别获取分子和分母。 greplgrep 的逻辑版本——只要找到 "^abc"(即以 abc 开头的字符串),它就会 returns TRUERecall伯努利向量的平均值是成功的百分比。

如果您想按行或按列执行此操作,您可以使用 apply,例如apply(dat,1,function(x)mean(grepl("^abc",x))) 获取逐行均值。