R-为列表中的每个数据帧添加新ID(使用apply或dplyr)
对于每个数据帧,我需要一个唯一的标识符。我已经可以使用for循环来实现这一点,但我正在尝试使我的代码更像R,我觉得这可以通过apply函数或dplyr来实现。我当前的代码示例:R-为列表中的每个数据帧添加新ID(使用apply或dplyr),r,list,dataframe,dplyr,apply,R,List,Dataframe,Dplyr,Apply,对于每个数据帧,我需要一个唯一的标识符。我已经可以使用for循环来实现这一点,但我正在尝试使我的代码更像R,我觉得这可以通过apply函数或dplyr来实现。我当前的代码示例: df1 <- data.frame(x="ayyy", y=rnorm(5)) df2 <- data.frame(x="lmao", y=rnorm(6)) l1 <- list(df1,df2) for (i in seq_along(l1)){ l1[[i]] <- cbind(l1[
df1 <- data.frame(x="ayyy", y=rnorm(5))
df2 <- data.frame(x="lmao", y=rnorm(6))
l1 <- list(df1,df2)
for (i in seq_along(l1)){
l1[[i]] <- cbind(l1[[i]],i)
}
l1
我也希望有其他方法可以达到这个目的。您可以使用purr::imap,它将列表中每个元素的索引作为第二个参数传递给函数:
library(purrr); library(dplyr)
imap(l1, ~ mutate(.x, i = .y))
#[[1]]
# x y i
#1 ayyy -1.761054 1
#2 ayyy -2.123735 1
#3 ayyy -1.525554 1
#4 ayyy -1.756684 1
#5 ayyy -1.686749 1
#[[2]]
# x y i
#1 lmao 0.05505287 2
#2 lmao -0.33393283 2
#3 lmao -1.91543274 2
#4 lmao -1.03591717 2
#5 lmao 0.67857511 2
#6 lmao 0.61049477 2
这相当于使用Map的基本R解决方案:
请注意,使用lappy或apply时,您无法在循环遍历每个元素时跟踪它们的索引。使用mappy:
mapplycbind,l1,i=seq_alongl1,SIMPLIFY=F
输出:
[[1]]
x y i
1 ayyy 1.52049119 1
2 ayyy 0.79595595 1
3 ayyy -1.45352957 1
4 ayyy 0.09839542 1
5 ayyy -0.59377098 1
[[2]]
x y i
1 lmao 0.88828117 2
2 lmao 0.05307042 2
3 lmao -0.55702363 2
4 lmao 0.43839704 2
5 lmao 0.15260816 2
6 lmao -0.16461758 2
[[1]]
x y i
1 ayyy 1.52049119 1
2 ayyy 0.79595595 1
3 ayyy -1.45352957 1
4 ayyy 0.09839542 1
5 ayyy -0.59377098 1
[[2]]
x y i
1 lmao 0.88828117 2
2 lmao 0.05307042 2
3 lmao -0.55702363 2
4 lmao 0.43839704 2
5 lmao 0.15260816 2
6 lmao -0.16461758 2