使用特定字符串在数据集中保留观测值-R

使用特定字符串在数据集中保留观测值-R,r,string,R,String,我正在尝试执行以下操作: 我有: v1我想这就是你想要的: library(stringr) df <- data.frame(v1 = c("Persons Name <personsemail@email.com>","person 2 <person2@email.com>","person4",NA,"person5","Random Name <randomname@email.com>"), string

我正在尝试执行以下操作:

我有:


v1我想这就是你想要的:

library(stringr)

df <- data.frame(v1 = c("Persons Name <personsemail@email.com>","person 2 <person2@email.com>","person4",NA,"person5","Random Name <randomname@email.com>"), 
                 stringsAsFactors = FALSE)

df$v2 <- str_extract(df$v1, "<(.*)>")          #Extracts text from "<" through ">"
df$v2 <- str_replace_all(df$v2 , c("<|>"), "") #Replaces "<" or ">" with ""
df    <- na.omit(df)                           #Omits's rows with NA from the entire df. Use a different approach if you have NA in OTHER columns.

#                                     v1                     v2
#1 Persons Name <personsemail@email.com> personsemail@email.com
#2          person 2 <person2@email.com>      person2@email.com
#6    Random Name <randomname@email.com>   randomname@email.com
库(stringr)

df我想这就是你想要的:

library(stringr)

df <- data.frame(v1 = c("Persons Name <personsemail@email.com>","person 2 <person2@email.com>","person4",NA,"person5","Random Name <randomname@email.com>"), 
                 stringsAsFactors = FALSE)

df$v2 <- str_extract(df$v1, "<(.*)>")          #Extracts text from "<" through ">"
df$v2 <- str_replace_all(df$v2 , c("<|>"), "") #Replaces "<" or ">" with ""
df    <- na.omit(df)                           #Omits's rows with NA from the entire df. Use a different approach if you have NA in OTHER columns.

#                                     v1                     v2
#1 Persons Name <personsemail@email.com> personsemail@email.com
#2          person 2 <person2@email.com>      person2@email.com
#6    Random Name <randomname@email.com>   randomname@email.com
库(stringr)
df如果可以排除“NA”条目,则可以使用以下方法

df <- as.data.frame(v1)
df$v2 <- as.person(v1)$email
df如果可以排除“NA”条目,则可以使用以下方法

df <- as.data.frame(v1)
df$v2 <- as.person(v1)$email

df您可以先使用
v1
进行子集设置!is.na(v1)
,然后用
将其子集!sappy(v2,is.null)
可以在你有电子邮件的地方找到它们

v2 <- as.person(v1)$email
cbind(v1[!is.na(v1)][!sapply(v2, is.null)], unlist(v2))
#     [,1]                                    [,2]                    
#[1,] "Persons Name <personsemail@email.com>" "personsemail@email.com"
#[2,] "person 2 <person2@email.com>"          "person2@email.com"     
#[3,] "Random Name <randomname@email.com>"    "randomname@email.com"  

v2您可以先使用
v1
进行子集设置!is.na(v1)
,然后用
将其子集!sappy(v2,is.null)
可以在你有电子邮件的地方找到它们

v2 <- as.person(v1)$email
cbind(v1[!is.na(v1)][!sapply(v2, is.null)], unlist(v2))
#     [,1]                                    [,2]                    
#[1,] "Persons Name <personsemail@email.com>" "personsemail@email.com"
#[2,] "person 2 <person2@email.com>"          "person2@email.com"     
#[3,] "Random Name <randomname@email.com>"    "randomname@email.com"  

v2一个选项还可以将
列表的名称设置为
NA
已删除的'v1'(
NA.omit
)的
as.person
,并将其转换为两列
data.frame
stack

v2 <- na.omit(v1)
stack(setNames(as.person(v2)$email, v2))[2:1]
#                               ind                 values
#1 Persons Name <personsemail@email.com> personsemail@email.com
#2          person 2 <person2@email.com>      person2@email.com
#3    Random Name <randomname@email.com>   randomname@email.com

v2一个选项还可以将
列表的名称设置为
NA
已删除的'v1'(
NA.omit
)的
as.person
,并将其转换为两列
data.frame
stack

v2 <- na.omit(v1)
stack(setNames(as.person(v2)$email, v2))[2:1]
#                               ind                 values
#1 Persons Name <personsemail@email.com> personsemail@email.com
#2          person 2 <person2@email.com>      person2@email.com
#3    Random Name <randomname@email.com>   randomname@email.com
v2