Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.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_String_Dataframe_Extract_Alphanumeric - Fatal编程技术网

R 从字符串中提取所有单词,并使用结果创建一列

R 从字符串中提取所有单词,并使用结果创建一列,r,string,dataframe,extract,alphanumeric,R,String,Dataframe,Extract,Alphanumeric,我有一个数据帧(data3),其中有一列名为“Collector”。在本栏中,我有字母数字字符。例如:“Ruiz和Galvis 650”。我需要分别提取字母字符和数字字符,并创建两个新列,一个包含该字符串的数字(ColID),另一个包含所有单词(Col): 输入: Collector Times Sample Ruiz and Galvis 650 9 SP.1 Smith e

我有一个数据帧(data3),其中有一列名为“Collector”。在本栏中,我有字母数字字符。例如:“Ruiz和Galvis 650”。我需要分别提取字母字符和数字字符,并创建两个新列,一个包含该字符串的数字(ColID),另一个包含所有单词(Col):

输入:

Collector                       Times     Sample
Ruiz and Galvis 650             9         SP.1              
Smith et al 469                 8         SP.1
预期产量

Collector                       Times     Sample     ColID    Col
Ruiz and Galvis 650             9         SP.1        650     Ruiz and Galvis
Smith et al 469                 8         SP.1        469     Smith et al
我尝试了以下操作,但当我尝试保存文件时,出现了一个错误(在.External2(C_writetable,x,file,nrow(x),p,rnames,sep,eol,)中出错: “EncodeElement”中未实现的类型“list”:


regexp问题在于
str\u extract\u all
不能只找到单个字符串,而是找到多个字符串的列表。例如:

> dput(str_extract_all("Ruiz and Galvis 650", "[[:alpha:]]+"))
list(c("Ruiz", "and", "Galvis"))
带有嵌套元素的数据框(如上所述)显然无法保存到文件中

但是,如果更新正则表达式模式以匹配空格和字母,则可以使用
str\u extract

> dput(str_extract("Ruiz and Galvis 650", "[[:alpha:] ]+"))
"Ruiz and Galvis "

请注意第二个正则表达式中的空格。这将所有字母/空格匹配为一个字符串,并允许您将data.frame写入文件。

问题在于
str\u extract\u all
不仅查找单个字符串,还查找多个字符串的列表。例如:

> dput(str_extract_all("Ruiz and Galvis 650", "[[:alpha:]]+"))
list(c("Ruiz", "and", "Galvis"))
带有嵌套元素的数据框(如上所述)显然无法保存到文件中

但是,如果更新正则表达式模式以匹配空格和字母,则可以使用
str\u extract

> dput(str_extract("Ruiz and Galvis 650", "[[:alpha:] ]+"))
"Ruiz and Galvis "

请注意第二个正则表达式中的空格。这将所有字母/空格匹配为一个字符串,并允许您将data.frame写入一个文件。

如果您的数据与示例中显示的一样一致,则这是另一个选项:

library(stringi)
library(purrr)
library(dplyr)

df <- data.frame(Collector=c("Ruiz and Galvis 650", "Smith et al 469"),
                 Times=c(9, 8),
                 Sample=c("SP.1", "SP.1"),
                 stringsAsFactors=FALSE)

stri_match_first(df$Collector, regex="([[:alpha:][:space:]]+) ([[:digit:]]+)") %>% 
  as.data.frame(stringsAsFactors=FALSE) %>% 
  select(Col=V2, ColID=V3) %>% 
  bind_cols(df) %>% 
  select(-Collector)
##               Col ColID Times Sample
## 1 Ruiz and Galvis   650     9   SP.1
## 2     Smith et al   469     8   SP.1
库(stringi)
图书馆(purrr)
图书馆(dplyr)
df%
as.data.frame(stringsAsFactors=FALSE)%>%
选择(Col=V2,ColID=V3)%>%
绑定列(df)%>%
选择(-Collector)
##Col-ColID时间样本
##1 Ruiz和Galvis 650 9 SP.1
##2 Smith等人469 8 SP.1

如果您的数据如示例所示是统一的,那么这是另一个选项:

library(stringi)
library(purrr)
library(dplyr)

df <- data.frame(Collector=c("Ruiz and Galvis 650", "Smith et al 469"),
                 Times=c(9, 8),
                 Sample=c("SP.1", "SP.1"),
                 stringsAsFactors=FALSE)

stri_match_first(df$Collector, regex="([[:alpha:][:space:]]+) ([[:digit:]]+)") %>% 
  as.data.frame(stringsAsFactors=FALSE) %>% 
  select(Col=V2, ColID=V3) %>% 
  bind_cols(df) %>% 
  select(-Collector)
##               Col ColID Times Sample
## 1 Ruiz and Galvis   650     9   SP.1
## 2     Smith et al   469     8   SP.1
库(stringi)
图书馆(purrr)
图书馆(dplyr)
df%
as.data.frame(stringsAsFactors=FALSE)%>%
选择(Col=V2,ColID=V3)%>%
绑定列(df)%>%
选择(-Collector)
##Col-ColID时间样本
##1 Ruiz和Galvis 650 9 SP.1
##2 Smith等人469 8 SP.1

谢谢!你的回答让我对这个话题有了更多的了解。谢谢!你的回答让我对这个话题有了更多的了解。