用R中的行名替换值对应行的顺序

问题描述

我有一个类似这样的数据框:

    rowid A B 
     101  1 3
     102  2 3
     103  1 4
     104  2 4

我想用 R 中相应的 rowid(请参考下表)替换 A 和 B 列中的值。A 和 B 列中的值基于 rowid 的顺序。例如,我想将 A 列中的值 3 替换为 103 的 rowid。如果有人可以提供任何建议,我将不胜感激。

    rowid  A   B
     101  101 103
     102  102 103
     103  101 104
     104  102 104

解决方法

使用 dplyr 你可以:

library(dplyr)
df %>% mutate(across(-rowid,~rowid[.]))

#  rowid   A   B
#1   101 101 103
#2   102 102 103
#3   103 101 104
#4   104 102 104

在带有 lapply 的基础 R 中:

df[-1] <- lapply(df[-1],function(x) df$rowid[x])

数据

df <- structure(list(rowid = 101:104,A = c(1L,2L,1L,2L),B = c(3L,3L,4L,4L)),class = "data.frame",row.names = c(NA,-4L))