Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:统计数据帧中的行数,匹配字符位于字符串的指定位置_R_Count_Character_String Matching - Fatal编程技术网

R:统计数据帧中的行数,匹配字符位于字符串的指定位置

R:统计数据帧中的行数,匹配字符位于字符串的指定位置,r,count,character,string-matching,R,Count,Character,String Matching,我有一个数据框,其中有一列字符: strings 1 a;b;c;d 2 g;h;i;j 3 k;m 4 o 我想获得字符串中特定位置具有特定字符的字符串(行)数 例如 获取以第3个字符作为 此集合中的字符:{a,b,m} 在这种情况下,输出应该是2,因为只有第1行和第3行 将{a,b,m}中的任何字符作为 绳子 我只能使用此代码查找任何包含“b”的字符串: sum(grepl("b",df)) 然而,这对于上述任务来说还不够好。 请给出建议。尝试以下方法: sum(

我有一个数据框,其中有一列字符:

  strings
1 a;b;c;d
2 g;h;i;j
3     k;m
4       o
我想获得字符串中特定位置具有特定字符的字符串(行)数

例如

获取以第3个字符作为 此集合中的字符:{a,b,m}

在这种情况下,输出应该是2,因为只有第1行和第3行 将{a,b,m}中的任何字符作为 绳子

我只能使用此代码查找任何包含“b”的字符串:

sum(grepl("b",df))
然而,这对于上述任务来说还不够好。 请给出建议。

尝试以下方法:

sum(substr(df$strings,3,3) %in% c("a","b","m"))
或者,如果您想使用
与delimeter一样,您可以执行以下操作:

sum(sapply(strsplit(df$strings,";"),function(x) x[2] %in% c("a","b","m")))

您可以尝试
grepl

x = c('a;b;c;d','g;h;i;j','k;m','o')

sum(grepl('^.{2}[abm]', x))
#[1] 2

你需要使用一些正则表达式。在本例中,使用“or”操作符,其用法如下:“(a | b | m)”,“|”是“or”操作符。这将返回任何包含a、b或m的字符串。将
grepl
中的“b”替换为“(a | b | m)”。但是,我对使用
grepl
有点困惑,因为它返回一个逻辑值,即一个项目是否在某个项目中,所以我不确定为什么要取它的总和。很好。不需要尾随的
*
。我想OP需要第三个字符,而不是第二个。那么在这种情况下{2}应该是{4}吗?回答得好。非常紧凑。第一个有效。但第二个给了我这样的信息:sum(lapply)(strsplit(df$strings,“;”)中的错误,函数(x)x[2]%在%:的“type”(list)无效argument@ConanG我将其更新为
sapply()
,工作正常。