我的数据看起来像:
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?
答案 0 :(得分:4)
我会用:
> mean(grepl("^abc",unlist(dat)))
[1] 0.7857143
使用mean
表示您不必单独获取分子和分母。 grepl
是grep
的逻辑版本 - 只要找到TRUE
(即以"^abc"
开头的字符串),它就会返回abc
。 Recall伯努利向量的平均值是成功的百分比。
如果您想按行或按列执行此操作,请使用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)