r - 计算模式并区分它们

标签 r count stringr find-occurrences

我想为数据帧的每一行计算一个字符串中定义的模式(此处:'Y')。理想情况下,我希望在 V3 中出现多次,在 V4 中得到长度。

输入:

V1  V2
A   XXYYYYY
B   XXYYXX
C   XYXXYX
D   XYYXYX

输出:
V1       V2 V3   V4
 A  XXYYYYY  1    5
 B   XXYYXX  1    2
 C   XYXXYX  2  1,1
 D   XYYXYX  2  2,1

我尝试了以下函数的不同修改,但没有成功。
dict <- setNames(nm=c("Y"))
seqs <- df$V2
sapply(dict, str_count, string=seqs)

提前致谢!

最佳答案

另一个基本的 R 解决方案,但使用 regexpr :

df <- data.frame(
  V1 = c("A", "B", "C", "D"),
  V2 = c("XXYYYYY", "XXYYXX" , "XYXXYX", "XYYXYX")
)

提取match.length regexpr 的属性输出,然后计算每个属性的长度(它告诉您有多少匹配项):
r <- gregexpr("Y+", df$V2)
len <- lapply(r, FUN = function(x) as.array((attributes(x)[[1]])))
df$V3 <- lengths(len)
df$V4 <- len

df
#V1      V2 V3   V4
#1  A XXYYYYY  1    5
#2  B  XXYYXX  1    2
#3  C  XYXXYX  2 1, 1
#4  D  XYYXYX  2 2, 1

如果您有没有 lengths 的旧版 R但是你可以使用 df$V3 <- sapply(len, length)反而。
如果你需要一个更通用的函数来对任何向量做同样的事情 x和图案a :
foo <- function(x, a){
  ans <- data.frame(x)
  r <- gregexpr(a, x)
  len <- lapply(r, FUN = function(z) as.array((attributes(z)[[1]])))
  ans$quantity <- lengths(len)
  ans$lengths <- len
  ans
}

试试 foo(df$V2, 'Y+') .

关于r - 计算模式并区分它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34845000/

相关文章:

r - 使用 R 选择列中组内的前 N ​​个值

r - 自动将 R 因子扩展为每个因子水平的 1/0 指标变量的集合

r - 如何使用apply分解R中data.frame中的特定列

mysql - 我可以设置一个条件来过滤我的 COUNT 子句吗? mysql

r - 如何在R v3中访问Windows COM对象?

mySQL 多个 INNER JOIN

excel - 在同一工作簿中将函数值从一张表计算到另一张表

r - 将组合因子列拆分为 r data.table 中的两个因子列的最有效方法是什么?

r - 将数据帧中的字符向量与另一个字符向量和修剪字符匹配

r - dplyr:使用链接来传递变量