繁体   English   中英

仅计数具有特殊字符R的单元格

[英]counting cells with only special characters R

我有一个data.frame如下。 我想获得一个甚至没有单个数字或a-z到其频率的单元格列表。 我该怎么办? 在以下数据的情况下,我想要一张表。 在表格的第一栏中,我将拥有*和。 这些第二列将显示这些值的频率(分别为1和2)。 “ a *”和“ 21.9”不会出现,因为它们至少包含一个数字或az

sm <- matrix(c(51,".",22,"*","a*","21.9",".",22,9),ncol=3,byrow=TRUE)
smdf<-as.data.frame(sm)

这是否提供您想要的?

require(plyr)
sm <- matrix(c(51,".",22,"*","a*","21.9",".",22,9),ncol=3,byrow=TRUE)
count(sm[!grepl("[[:alnum:]]", sm)])

  x freq
1 *    1
2 .    2

如果您还想排除NA和空格,则可以轻松地向过滤器添加适当的条件。 顺便说一句,我可以肯定的是,一个更优雅的正则表达式可以在没有额外参数的情况下解决此问题,但是我的正则表达式技能正在不断发展。 如果我设法弄清楚这种事情,将会更新。

sm <- matrix(c(51,".",22,"*","a*","21.9",".",22,9, " ", NA, 13),ncol=3,byrow=TRUE)
count(sm[!grepl("[[:alnum:]]", sm) & !is.na(sm) & sm != " "])

  x freq
1 *    1
2 .    2

但是,如果有特定的字符列表希望计数,则始终可以将这些字符作为向量,仅对那些字符进行计数。 这不需要额外的“空格”和“ NA”组件。

sm <- matrix(c(51,".",22,"*","a*","21.9",".",22,9, " ", NA, 13),ncol=3,byrow=TRUE)
x <- unlist(strsplit("*~!@#$%^&(){}_+:\"<>?,./;'[]-=", split=""))
count(sm[sm %in% x])

  x freq
1 *    1
2 .    2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM