我有50列名字,但为了方便起见,我在这里只列出了4列.

Name1       Name2         Name3      Name4
Rose,Ali    Van,Hall      Ghol,Dam   Murr,kate
Camp,Laura  Ka,Klo        Dan,Dan    Ali,Hoss
Rose,Ali    Van,Hall      Ghol,Dam   Kol,Kan
Murr,Kate   Ismal, Ismal  Sian,Rozi  Nas,Ami
Ghol,Dam    Ka,Klo        Rose,Ali   Nor,Ko
Murr,Kate   Ismal, Ismal  Dan,Dan    Nas,Ami

我想要根据列给每个人分配数字,一个数字序列.

例如,在名称1中,我们得到从1到4的数字.重复的名字将得到相同的数字.

在名称2中,它应该从5开始,依此类推.这将为我提供下表:

Assign1 Assian2 Assian3 Assian4
      1       5       8      12
      2       6       9      13
      1       5       8      14
      3       7      10      15
      4       6      11      17
      3       7       9      15

我想要不带圈的,也就是sapply,即sapply(dat, function(x) match(x, unique(x))).

使用dplyr或tidyverse会很棒.

推荐答案

tidyverse%的解决方案具有purrr::accumulate():

library(tidyverse)

df %>%
  mutate(as_tibble(
    accumulate(across(Name1:Name4, ~ match(.x, unique(.x))), ~ .y + max(.x))
  ))

#   Name1 Name2 Name3 Name4
# 1     1     5     8    12
# 2     2     6     9    13
# 3     1     5     8    14
# 4     3     7    10    15
# 5     4     6    11    16
# 6     3     7     9    15

R相关问答推荐

如果行和列名以相同的开头,将矩阵值设置为0

在通过最大似然估计将ODE模型与数据匹配时,为什么要匹配实际参数的转换值?

咕噜中的元素列表:map

以R中的正确顺序将日期时间字符列转换为posixct

从gtsummary包中使用tBL_strata()和tBL_summary()时删除变量标签

ggplot的轴标签保存在officer中时被剪切

计算具有奇数日期的运行金额

单个轮廓重叠条的单独图例

在R中,如何将变量(A,B和C)拟合在同一列中,如A和B,以及A和C在同一面板中?

根据日期从参考帧中创建不同的帧

根据元素和前一个值之间的差值过滤矩阵的元素

如何计算R glm probit中的线性预测因子?

解析嵌套程度极高的地理数据

无法将条件case_when()应用于使用!!创建的新变量Mutations

快速合并R内的值

数据集上的R循环和存储模型系数

当由base::限定时,`[.factor`引发NextMethod错误

是否从列中删除★符号?

如何在shiny 的应用程序 map 视图宣传单中可视化单点

如何从矩阵绘制环弦图