仅使用特殊字符R计数单元格
我有一个data.frame,如下所示。我想得到一个没有一个数字或a-to-z的单元格列表,以及它们的频率。我怎么能这么做?如果有以下数据,我需要一个表格。在表的第一列中,我将使用*和。第二列将显示这些值的频率(分别为1和2)。“a*”和“21.9”不会出现,因为它们至少包含一个数字或a-z仅使用特殊字符R计数单元格,r,count,R,Count,我有一个data.frame,如下所示。我想得到一个没有一个数字或a-to-z的单元格列表,以及它们的频率。我怎么能这么做?如果有以下数据,我需要一个表格。在表的第一列中,我将使用*和。第二列将显示这些值的频率(分别为1和2)。“a*”和“21.9”不会出现,因为它们至少包含一个数字或a-z sm <- matrix(c(51,".",22,"*","a*","21.9",".",22,9),ncol=3,byrow=TRUE) smdf<-as.data.frame(sm) sm
sm <- matrix(c(51,".",22,"*","a*","21.9",".",22,9),ncol=3,byrow=TRUE)
smdf<-as.data.frame(sm)
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
require(plyr)
山猫,我不知道我明白你想要什么<代码>应用(smdf,1,函数(x)!grepl(“[a-z0-9]”,x))
将为您提供一个矩阵,该矩阵将告诉您smdf的每个条目是否至少包含一个a-z或0-9。我不明白第二步。您需要包含*
或
的单元格计数。如果一个单元格同时包含这两个元素呢?您关心的是一般的特殊字符还是这两个字符?是的,输出是正确的。能否简要解释一下它是如何工作的?@user2543622,它正在使用。[[:alnum:][/code>使用grepl
函数选择所有包含字母数字字符的字符。不选择(!grepl(…)
)从原始矩阵开始,最后使用plyr包中的nice count函数计算剩余的。确保当sm
中的一个条目是'*.
或'**'.
时,这符合您的要求。我在data.frame上运行了上述解决方案,但没有得到所需的结果。因此,我将data.frame转换为matrix,它成功了:)。但它也打印出两个条目“空白值”和“…知道为什么吗?空格不是字母数字字符。就解决方案而言,它是一个“特殊字符”。至于,您的数据帧是否包含NAs?
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
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