在数据框列表中创建列表名称列

时间:2017-10-18 08:37:36

标签: r

数据:

 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列时遇到了困难。

3 个答案:

答案 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]))))