我在此之前问了一个类似的问题:How to calculate percentage of cells in data frame that start with sequence in R?
我会将其中的一部分复制一下以询问新问题。
我的数据看起来像:
Set_1 Set_2 Set_3 Set_4 Set_5 Set_6 Set_7
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"开头的单元格。因此第1行将有6个单元格。第2行有4个单元格。第3行有6个单元格等。我想制作一个直方图。如何在R中完成?目前,我的数据位于data.frame中。
答案 0 :(得分:2)
您可以使用
计算每行中以“abc”开头的条目数y <- apply(df, 1, function(x) sum(grepl("^abc", x)))
#> y
#[1] 6 4 6 6
可以使用
在直方图中绘制此结果hist(y, breaks=c(1:max(y)), main = "Frequency of 'abc' entries", col="lightblue")
如果您更喜欢每行“abc”计数值的图形表示,则可以使用barplot()
代替hist()
:
barplot(y, main = "Number of 'abc' entries in each row",col="lightblue")
数据强>
text <- "Set_1 Set_2 Set_3 Set_4 Set_5 Set_6 Set_7
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"
df <- read.table(text=text, header=T)
答案 1 :(得分:1)
使用tidyr
,dplyr
和基础R hist
x <- data.frame(Set_1 = c("abc89", "abc6", "abc90", 111),
Set_2 = c("abc62", "pop", "a16", "abc15"),
Set_3 = c(67, "abc11", "abc123", "abc72"),
Set_4 = c("abc513", "abc4", "abc33", "abc36"), stringsAsFactors=F)
require(tidyr)
require(dplyr)
x %>%
gather(Set, val) %>%
group_by(Set) %>%
summarise(count=sum(grepl("^abc", val))) %>%
.$count %>%
hist
抱歉,我无法附加图像输出。