如何为数据帧中的每个元素附加序号? [英] How to append a sequential number for every element in a data frame?

查看:58
本文介绍了如何为数据帧中的每个元素附加序号?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此问题是对>如何

V1 <- c("a", "a", "b", "b", "b")
V2 <- c("c" ,"d", "e" ,"e", "f")
V3  <- c("i", "j", "k", "l", "m")
df <- data.frame(V1, V2, V3)
df[] <- Map(paste0, seq_along(df), df)

输出

  V1 V2 V3
1 1a 2c 3i
2 1a 2d 3j
3 1b 2e 3k
4 1b 2e 3l
5 1b 2f 3m

我该如何创建以下输出?

How can I create the following output instead?

  V1       V2       V3
1 1.1.a   2.1.c   3.1.i
2 1.1.a   2.2.d   3.2.j
3 1.2.b   2.3.e   3.3.k
4 1.2.b   2.3.e   3.4.l
5 1.2.b   2.4.f   3.5.m


推荐答案

另一种选择是使用 match 唯一每个列的元素,并执行粘贴

Another option is to use match with the unique elements of each of the column and the do the paste

df[] <- paste(col(df), sapply(df, function(x) match(x, unique(x))), 
                as.matrix(df), sep=".")
df
#     V1    V2    V3
#1 1.1.a 2.1.c 3.1.i
#2 1.1.a 2.2.d 3.2.j
#3 1.2.b 2.3.e 3.3.k
#4 1.2.b 2.3.e 3.4.l
#5 1.2.b 2.4.f 3.5.m






或使用 tidyverse

library(tidyverse)
imap(seq_along(df), ~ 
           df %>% 
              select(.x) %>%
              mutate_at(1, funs(paste(.y, match(., unique(.)), ., sep="." )))) %>%
     bind_cols
#     V1    V2    V3
#1 1.1.a 2.1.c 3.1.i
#2 1.1.a 2.2.d 3.2.j
#3 1.2.b 2.3.e 3.3.k
#4 1.2.b 2.3.e 3.4.l
#5 1.2.b 2.4.f 3.5.m

这篇关于如何为数据帧中的每个元素附加序号?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆