使用tidyr::pivot_longer整合多列转长格式报错的解决方法
解决方法
你可以通过tidyr::pivot_longer的多值列匹配功能,拆分comment开头的两类列,避免不同数据类型合并报错,实现代码如下:
library(tidyverse) # 转换宽表为长表 target_data <- data %>% pivot_longer( # 选中所有comment开头的列 cols = starts_with("comment"), # 正则拆分列名:第一组匹配comment+数字,第二组匹配可选的_quote后缀 names_pattern = "(comment\\d)(_quote)?", # .value表示将分组匹配到的后缀作为独立值列 names_to = c("comment_seq", ".value"), # 丢弃空评论行 values_drop_na = TRUE ) %>% # 重命名列,保留需要的字段 rename(comment = `comment`, quote = `_quote`) %>% select(id, n_comments, comment, quote)
运行上述代码即可得到符合要求的长表数据。
原理解释
- 之前报错的核心原因是你将字符型的评论内容列、数值型的引用标记列合并到同一个值列,两类数据类型不兼容导致报错。
- 这里通过
names_pattern把列名拆分为「评论序号」和「字段类型」两个分组,用.value参数将评论内容、引用标记分别放到两个独立的值列中,既避免了类型冲突,也自动匹配了每条评论对应的引用状态,不需要额外做关联拼接。
内容的提问来源于stack exchange,提问作者Scijens
相关产品推荐
相关产品推荐

