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

在R(tidyverse)中匹配并重新排序多列数据行

解决方案

可以用dplyr的across()函数批量处理所有以subj开头的列,完美嵌入管道操作:

library(dplyr)

data = tibble(item = 1:10, 
              subj01 = c(1,2,5,9,10,NA,NA,NA,NA,NA), 
              subj02 = c(1,2,5,6,8,9,10,NA,NA,NA), 
              subj03 = c(1,6,9,NA,NA,NA,NA,NA,NA,NA))

# 核心处理代码
processed_data <- data %>%
  mutate(across(starts_with("subj"), ~ .x[match(item, .x)]))

processed_data

代码解释

  • starts_with("subj"):匹配所有以subj开头的列,自动适配你实际数据中更多的同类列
  • ~ .x[match(item, .x)]:对每一列(用.x指代当前处理的列)执行你已掌握的单列匹配逻辑,match(item, .x)会找到每个item值在当前列中的位置,再用这个位置重新索引当前列
  • 之前报错是因为没有用across()批量迭代列,直接在mutate里用自定义变量名无法被dplyr识别

输出结果

执行后得到的目标数据集如下:

# A tibble: 10 × 4
    item subj01 subj02 subj03
   <int>  <dbl>  <dbl>  <dbl>
 1     1      1      1      1
 2     2      2      2     NA
 3     3     NA     NA     NA
 4     4     NA     NA     NA
 5     5      5      5     NA
 6     6     NA      6      6
 7     7     NA     NA     NA
 8     8     NA      8     NA
 9     9      9     NA      9
10    10     10     10     NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:45:46