返回单词的前n个字母

Ada*_*dam 2 r

现在我在R中有以下代码行:

counts = table(unlist(dataTable[, grep('column', names(dataTable))]))
Run Code Online (Sandbox Code Playgroud)

并有一个类似于这个的数据表:

print(dataTable)

 column_1   column_2   column_3
  ball.3     ball.3     ball.3
  NA         ball.1     ball.1
  ball.3     NA         ball.2
  NA         NA         NA      
  ball.2     ball.2     ball.1
  ball.1     NA         ball.1
  disk.1     disk.2     NA
  disk.2     disk.2     disk.3
  disk.2     disk.1     NA
Run Code Online (Sandbox Code Playgroud)

这段代码目前将提取"ball.1","ball.2","ball.3","disk.1","disk.2"和"disk.3"的所有实例,并将它们放入表格如下:

print(counts)

ball.1       ball.2      ball.3      disk.1      disk.2      disk.3
   5            3           4          2           4           1
Run Code Online (Sandbox Code Playgroud)

现在,我试图找到一种方法让grep只查找世界中的前n个字母并将该计数分配给一个类别.例如,在这个数据集中,我不太关心ball.1对ball.2对ball.3,但更愿意只计算单词以"ball"开头的次数或"磁盘",忽略了前n = 4个字母之后的任何内容.

最好是以一种我可以专注于寻找任何单词的前四个字母的方式工作,这样我就会有一个如下所示的数据表:

ball         disk
 12           7 
Run Code Online (Sandbox Code Playgroud)

我的推理:

我处理包含许多长物种名称的非常​​大的数据集.有时候,有人可能会在一个单词的后面附上一个数字,或者在某处留下/添加一个字母.如果我可以缩小我的代码的搜索参数以仅搜索名称中的前n个字母,我将消除必须通过.csv文件并仔细检查1000多行名称以进行拼写.我已经找到了解决这个问题的方法,但是只用其他语言找到了它们(不幸的是没有用C语言,或者我可以自己装配一些东西)

A5C*_*2T1 7

您可以尝试substr:

table(substr(unlist(mydf[, grep("column", names(mydf))]), 1, 4))
## 
## ball disk 
##   12    7 
Run Code Online (Sandbox Code Playgroud)

您也可以使用sub/ gsub如果您想要,可能是这样的:

table(gsub("(^.{4}).*", "\\1", unlist(mydf[, grep("column", names(mydf))])))
## 
## ball disk 
##   12    7 
Run Code Online (Sandbox Code Playgroud)