数据:
vec.1 <- c(1, 2)
vec.2 <- c(2, 3)
df.1 <- data.frame(vec.1, vec.2)
df.2 <- data.frame(vec.2, vec.1)
my_list <- list(df.1, df.2)
我希望创建一个列表编号列,该列按每个数据框排序 指示他们来自哪个列表。
打印数据列表:
[[1]]
vec.1 vec.2
1 1 2
2 2 3
[[2]]
vec.2 vec.1
1 2 1
2 3 2
代码:
funk <- function(x){
index <- seq(x)
linenum <-
cbind(x,index,linenum)
}
new.dat <- lapply(my_list, funk)
预期产出:
[[1]]
vec.1 vec.2 index listnum
1 1 2 1 1
2 2 3 2 1
[[2]]
vec.2 vec.1 index listnum
1 2 1 1 2
2 3 2 2 2
目前我在创建此listnum
列时遇到了困难。
答案 0 :(得分:2)
我们可以使用funk <- function(i,x){
index <- seq(x[[i]])
listnum <- i
cbind(x[[i]],index,listnum)
}
new.dat <- lapply(1:length(my_list), funk,my_list)
#>new.dat
#[[1]]
# vec.1 vec.2 index listnum
#1 1 2 1 1
#2 2 3 2 1
#[[2]]
# vec.2 vec.1 index listnum
#1 2 1 1 2
#2 3 2 2 2
来创建序列列,方法是循环遍历transform
元素,然后使用&#39; listnum&#39;基于&{39; my_list&#39;的list
的顺序与length
Map
或使用Map(cbind, lapply(my_list, function(x)
transform(x, index = seq_len(nrow(x)))), listnum = seq_len(length(my_list)))
tidyverse
答案 1 :(得分:1)
您可以像这样修改您的功能:
<div id="random-move-container" style="width:500px;height:500px;background:#f2f2f2">
<div id="random-move" style="left:0px;top:0px;width:10px;height:10px">test</div>
</div>
答案 2 :(得分:1)
这就是你所追求的
new_list <- lapply(1:length(my_list), function(x)
my_list[[x]] <- cbind(my_list[[x]][1],
my_list[[x]][2],
index = 1:length(my_list[[x]][[2]]),
listnum = rep(x, length(my_list[[x]][2]))))
new_list
# [[1]]
# vec.1 vec.2 index listnum
# 1 1 2 1 1
# 2 2 3 2 1
# [[2]]
# vec.2 vec.1 index listnum
# 1 2 1 1 2
# 2 3 2 2 2
刚刚意识到这可以在不必创建新数据集的情况下完成。运行以下后,my_list
包含所需的结果。
lapply(1:length(my_list), function(x)
my_list[[x]] <<- cbind(my_list[[x]][1],
my_list[[x]][2],
index = 1:length(my_list[[x]][[2]]),
listnum = rep(x, length(my_list[[x]][2]))))