R 筛选数据列具有特定的字
我有一个数据帧:R 筛选数据列具有特定的字,r,dataframe,R,Dataframe,我有一个数据帧: ID Value 1 {"user_id":112312} 2 {"email":#####@gmail.com, "phone":#######578} 3 {"email":#####@gmail.com} 4 {"user_id":234242} 我想过滤这个数据框,并保留列值中有“email”的行。因此,期望的结果是: ID Valu
ID Value
1 {"user_id":112312}
2 {"email":#####@gmail.com, "phone":#######578}
3 {"email":#####@gmail.com}
4 {"user_id":234242}
我想过滤这个数据框,并保留列值中有“email”的行。因此,期望的结果是:
ID Value
2 {"email":#####@gmail.com}
3 {"email":#####@gmail.com}
使用
dplyr
dataframe %>% filter(across(Value, ~ grepl('email', .)))
使用
dplyr
dataframe %>% filter(across(Value, ~ grepl('email', .)))
baser
解决方案是:
#Code
df2 <- df[grepl('email',df$Value),]
使用的一些数据:
#Data
df <- structure(list(ID = c(1, 2, 3, 4), Value = c("{\"user_id\":112312}",
"{\"email\":#####@gmail.com, \"phone\":#######578}", "{\"email\":#####@gmail.com}",
"{\"user_id\":234242}")), class = "data.frame", row.names = c(NA,
-4L))
#数据
dfAbase R
解决方案为:
#Code
df2 <- df[grepl('email',df$Value),]
使用的一些数据:
#Data
df <- structure(list(ID = c(1, 2, 3, 4), Value = c("{\"user_id\":112312}",
"{\"email\":#####@gmail.com, \"phone\":#######578}", "{\"email\":#####@gmail.com}",
"{\"user_id\":234242}")), class = "data.frame", row.names = c(NA,
-4L))
#数据
df您可以将包含“email”
部分的行子集,然后提取电子邮件的模式
library(dplyr)
library(stringr)
df %>%
filter(str_detect(Value, "email")) %>%
mutate(Value = str_c('{', str_extract(Value, '"email[^,}]+'), '}'))
# ID Value
# 1 2 {"email":#####@gmail.com}
# 2 3 {"email":#####@gmail.com}
您可以将包含“email”
部分的行子集,然后提取电子邮件的模式
library(dplyr)
library(stringr)
df %>%
filter(str_detect(Value, "email")) %>%
mutate(Value = str_c('{', str_extract(Value, '"email[^,}]+'), '}'))
# ID Value
# 1 2 {"email":#####@gmail.com}
# 2 3 {"email":#####@gmail.com}
首先,它看起来像是来自JSON数据,当您第一次加载它时,最好正确地解析它。试试这个包jsonlite
代替此操作,您可以尝试以下方法删除手机数据:
library(tidyverse)
df <- structure(list(ID = c(1, 2, 3, 4), Value = c("{\"user_id\":112312}",
"{\"email\":#####@gmail.com, \"phone\":#######578}", "{\"email\":#####@gmail.com}",
"{\"user_id\":234242}")), class = "data.frame", row.names = c(NA, -4L))
df %>%
as_tibble() %>%
mutate(Value = str_sub(Value, 2, -2),
Value = str_split(Value, ",", simplify = FALSE)) %>%
unnest(Value) %>%
filter(str_detect(Value, "email")) %>%
mutate(Value = paste0("{",Value,"}"))
库(tidyverse)
df%
as_tible()%>%
变异(值=str_sub(值,2,-2),
Value=str_split(Value,,,simplify=FALSE))%>%
unnest(值)%%>%
过滤器(str_detect(值,“email”))%>%
变异(值=paste0(“{”,值“}”))
我使用的是@Duck的答案中的数据结构。首先,它看起来是来自JSON数据,可能最好在首次加载时正确解析它。试试这个包jsonlite
代替此操作,您可以尝试以下方法删除手机数据:
library(tidyverse)
df <- structure(list(ID = c(1, 2, 3, 4), Value = c("{\"user_id\":112312}",
"{\"email\":#####@gmail.com, \"phone\":#######578}", "{\"email\":#####@gmail.com}",
"{\"user_id\":234242}")), class = "data.frame", row.names = c(NA, -4L))
df %>%
as_tibble() %>%
mutate(Value = str_sub(Value, 2, -2),
Value = str_split(Value, ",", simplify = FALSE)) %>%
unnest(Value) %>%
filter(str_detect(Value, "email")) %>%
mutate(Value = paste0("{",Value,"}"))
库(tidyverse)
df%
as_tible()%>%
变异(值=str_sub(值,2,-2),
Value=str_split(Value,,,simplify=FALSE))%>%
unnest(值)%%>%
过滤器(str_detect(值,“email”))%>%
变异(值=paste0(“{”,值“}”))
我使用的数据结构来自@Duck的答案。这是否回答了您的问题?这回答了你的问题吗?