Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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/1/list/4.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-为列表中的每个数据帧添加新ID(使用apply或dplyr)_R_List_Dataframe_Dplyr_Apply - Fatal编程技术网

R-为列表中的每个数据帧添加新ID(使用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[

对于每个数据帧,我需要一个唯一的标识符。我已经可以使用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[[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