You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言inner_join合并字符列报错,如何将同一数据框两字符列合并为一列?

解决方法

首先明确报错原因:inner_join()和left_join()是用来合并两个数据框的函数,你直接传入data1$Type.1、data1$Type.2这类字符向量,自然会触发类型不匹配的报错。要合并同一数据框内的两列,得根据你的实际需求选择对应方法:

情况1:每行的两列内容合并为单个字符串

如果想把每行的Type.1和Type.2用分隔符拼接(比如“草/毒”),同时处理Type.2的空值,推荐用stringr包的str_c(自动忽略NA):

library(dplyr)
library(stringr)

# 在原数据框新增合并后的列
data1 <- data1 %>%
  mutate(Type_combined = str_c(Type.1, Type.2, sep = "/", na.rm = TRUE))

如果不想额外加载stringr,用基础R的paste也能实现,只需先把NA替换为空字符串:

library(dplyr)

data1 <- data1 %>%
  mutate(Type_combined = paste(
    ifelse(is.na(Type.1), "", Type.1),
    ifelse(is.na(Type.2), "", Type.2),
    sep = "/"
  )) %>%
  # 去掉单列为空时产生的多余分隔符
  mutate(Type_combined = gsub("^/|/$", "", Type_combined))

情况2:把两列的所有值堆叠成一列

如果想把Type.1和Type.2的所有元素合并成一个单独的列(比如统计所有出现过的类型),用tidyr的pivot_longer最方便:

library(dplyr)
library(tidyr)

# 生成仅包含合并后类型的数据集,自动过滤空值
type_united <- data1 %>%
  select(Type.1, Type.2) %>%
  pivot_longer(
    cols = everything(),
    names_to = NULL,  # 不需要保留原列名
    values_to = "Type"
  ) %>%
  filter(!is.na(Type))

如果只需要一个纯向量,用基础R的c()就能快速实现:

# 合并两列向量
type_united <- c(data1$Type.1, data1$Type.2)
# 去掉空值
type_united <- type_united[!is.na(type_united)]
# 可选:去重
type_united <- unique(type_united)

内容的提问来源于stack exchange,提问作者Lucas K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:21:04