Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何为数据帧中的每个元素追加序列号?_R_Concatenation_Paste - Fatal编程技术网

R 如何为数据帧中的每个元素追加序列号?

R 如何为数据帧中的每个元素追加序列号?,r,concatenation,paste,R,Concatenation,Paste,这是一个后续问题 如何创建以下输出 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 您可以使用前面有lappy的Map指令 f <- function(x){ sp <- split(x, x) unlist(lapply(seq_alon

这是一个后续问题

如何创建以下输出

  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

您可以使用前面有
lappy
Map
指令

f <- function(x){
  sp <- split(x, x)
  unlist(lapply(seq_along(sp), function(i) paste(i, sp[[i]], sep = ".")))
}

df[] <- lapply(df, f)
df[] <- Map(paste, seq_along(df), 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

f另一个选项是使用
match
与每个列的
unique
元素进行匹配,然后执行
粘贴

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
V1 <- c("a", "a", "b", "b", "b")
V2 <- c("c" ,"d", "e" ,"e", "f")
V3  <- c("i", "j", "k", "l", "m")
dtf <- data.frame(V1, V2, V3)

num <- sapply(dtf, function(x) cumsum(-duplicated(x) + 1))

(m <- sapply(1:3, function(x) paste(x, num[, x], dtf[, x], sep=".")))
#      [,1]    [,2]    [,3]   
# [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"
as.data.frame(m, col.names=colnames(dtf))
#      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
f <- function(x){
  sp <- split(x, x)
  unlist(lapply(seq_along(sp), function(i) paste(i, sp[[i]], sep = ".")))
}

df[] <- lapply(df, f)
df[] <- Map(paste, seq_along(df), 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
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
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