Error in df_new %>% unnest(评价内容) %>% na.omit() %>% filter(nchar(评价内容) > : 没有"%>%"这个函数
时间: 2024-01-01 12:23:00 浏览: 63
`%>%`是`magrittr`包中的管道运算符,需要先加载该包才能使用。你可以在代码开头加上`library(magrittr)`来加载该包,然后再运行这段代码,例如:
```
library(magrittr)
df_new %>% unnest(评价内容) %>% na.omit() %>% filter(nchar(评价内容) > 0)
```
这样就可以避免出现没有"%>%"这个函数的错误提示了。
相关问题
# 分词,并过滤停用词 stop_words <- stop_words$word comments_words <- comments_df_clean$content %>% unnest_tokens(word, content) %>% anti_join(stop_words),优化代码,使其可以读取字符型数据
可以使用以下代码来进行分词并过滤停用词,同时支持读取字符型数据:
```R
library(tidytext)
library(dplyr)
# 读取停用词表
stop_words <- data.frame(word = stopwords("en"))
# 读取数据并进行清洗
comments_df <- read.csv("comments.csv", stringsAsFactors = FALSE)
comments_df_clean <- comments_df %>%
filter(!is.na(content)) %>%
mutate(content = tolower(content)) %>%
mutate(content = gsub("[^[:alnum:] ]", " ", content)) %>%
mutate(content = gsub("\\s+", " ", content))
# 分词并过滤停用词
comments_words <- comments_df_clean$content %>%
unnest_tokens(word, content) %>%
anti_join(stop_words, by = "word")
```
其中,`read.csv()`函数用于读取CSV文件,`stringsAsFactors = FALSE`参数指定字符型数据不转换为因子型。`filter()`函数用于过滤空值,`tolower()`函数用于将文本转换为小写,`gsub()`函数用于替换不需要的字符,`unnest_tokens()`函数用于将文本分词,`anti_join()`函数用于过滤停用词。
帮我优化这个pgsql select info.pot_type_name,info.ttpw_addr as twlPortName,info.ttpw_addr_code as twlPortCode,info.tmr_material_name,info.ids --库存 ,(select sum(twl_leave_stock) from tms_whe_control where twl_material_id = any(STRING_TO_ARRAY(ids, ','))and twl_port_code=ttpw_addr_code and pot_type_name='合作港口') as twl_leave_stock from ( select port.pot_type_name,ttpw.ttpw_addr ,ttpw.ttpw_addr_code,tmrGroup.tmr_material_name, array_to_string( ARRAY( SELECT unnest(string_to_array(array_to_string(array_agg(distinct(tmr.tmr_id)),','), ',')) ), ',' ) ids from tms_transport_plan_work ttpw,tms_material_ref tmr,tms_material_ref tmrGroup,pub_ports port,tms_transport_plan plan where tmr.tmr_id=ttpw_tmr_id and tmr.parent_tmr_id=tmrGroup.tmr_id and port.pot_regcd=ttpw.ttpw_addr_code and port.pot_cnname=ttpw.ttpw_addr and plan.ttp_id=ttpw.ttpw_ttp_id and plan.ttp_waybill_status >0 AND ttpw.ttpw_plan_amount > 0 GROUP BY pot_type_name,ttpw_addr,ttpw_addr_code,tmrGroup.tmr_material_name ORDER BY ttpw_addr ) as info
这个 SQL 语句有一些可优化的地方,可以考虑以下几点:
1. 尽可能使用 JOIN 代替子查询。例如,第一个子查询中的 `pub_ports` 表可以通过 JOIN 进行连接。
2. 避免使用 `array_agg` 和 `unnest` 函数。这些函数需要进行大量的数组转换操作,非常耗费资源。如果可以,可以考虑使用其他方式将数组数据按逗号拼接。
3. 在使用 GROUP BY 时,只选择必要的列。不需要 GROUP BY 的列可以在外部查询中进行选择。
4. 对于多个表的连接,可以考虑使用合适的索引来提高查询性能。
下面是优化后的 SQL 语句:
```
SELECT
pot.pot_type_name,
ttpw.ttpw_addr AS twlPortName,
ttpw.ttpw_addr_code AS twlPortCode,
tmrGroup.tmr_material_name,
array_to_string(ids, ',') AS ids,
tms_whe.twl_leave_stock
FROM (
SELECT
ttpw_tmr_id,
array_agg(DISTINCT tmr.tmr_id) AS ids,
ttpw_addr,
ttpw_addr_code,
pot_type_name,
tmrGroup.tmr_material_name
FROM tms_transport_plan_work ttpw
JOIN tms_material_ref tmr ON tmr.tmr_id = ttpw.ttpw_tmr_id
JOIN tms_material_ref tmrGroup ON tmrGroup.tmr_id = tmr.parent_tmr_id
JOIN pub_ports pot ON pot.pot_regcd = ttpw.ttpw_addr_code AND pot.pot_cnname = ttpw.ttpw_addr
WHERE ttpw_plan_amount > 0
GROUP BY ttpw_tmr_id, ttpw_addr, ttpw_addr_code, pot_type_name, tmrGroup.tmr_material_name
) AS info
LEFT JOIN (
SELECT twl_material_id, twl_port_code, SUM(twl_leave_stock) AS twl_leave_stock
FROM tms_whe_control
WHERE pot_type_name = '合作港口'
GROUP BY twl_material_id, twl_port_code
) AS tms_whe ON tms_whe.twl_material_id = ANY(ids) AND tms_whe.twl_port_code = twlPortCode
ORDER BY twlPortName
```
这个 SQL 语句使用了 JOIN 来代替子查询,并避免了使用 `array_agg` 和 `unnest` 函数。同时,只选择必要的列进行 GROUP BY,使用合适的索引来优化查询性能。
阅读全文