从因子向量列表中获取向量索引

时间:2018-09-24 16:36:17

标签: r dplyr tidyverse purrr

请考虑因子向量my.vector,它具有3个级别。如果我想获得包含每个级别出现的矢量索引的矢量列表。我可以这样

vec.levels <- levels(my.vector)
factor.vectors <- map(vec.levels, function(x) which(my.vector == x))

这给了我一个3个整数向量的列表,这些向量对应于每个因子水平的出现子索引。

我的问题是如何使它可扩展到每个具有一组因子水平的因子向量列表。即,从数据帧中提取因子向量作为子集数据帧,例如my.subset,并获取子集数据帧中每个因子的水平列表,例如my.levels.list。

那么,如何在my.levels.list和my.subset上进行操作以获得列表列表,其中列表是每个因子列中每个因子的索引向量?换句话说,遍历两个列表。有没有一种方法可以不使用tidyverse或其他R函数进行显式循环?

希望如此。感谢您的任何反馈。

感谢您的答复。好的取得包含2个因子列的数据框df:

   Citrus Cutlery
1   lemon   spoon
2    lime   spoon
3    lime   spoon
4  orange   spoon
5    lime   knife
6    lime    fork
7   lemon    fork
8   lemon    fork
9    lime   spoon
10   lime    fork
11  lemon   spoon
12 orange   knife
13 orange   spoon
14  lemon   knife
15   lime   knife
16  lemon   knife
17  lemon   spoon
18 orange   spoon
19   lime   spoon
20   lime    fork

我可以将每个因子向量分别应用于上述水平并映射语句以生成Citrus子索引列表:

[[1]]
[1]  1  7  8 11 14 16 17

[[2]]
[1]  2  3  5  6  9 10 15 19 20

[[3]]
[1]  4 12 13 18

“餐具”子索引列表:

[[1]]
[1]  6  7  8 10 20

[[2]]
[1]  5 12 14 15 16

[[3]]
 [1]  1  2  3  4  9 11 13 17 18 19

我可以将组合级别作为列表获取:

lapply(df, levels)

$`Citrus`
[1] "lemon"  "lime"   "orange"

$Cutlery
[1] "fork"  "knife" "spoon"

我正在寻找一种巧妙的方法来循环因子列,并使用lapply语句派生的每一列的唯一级别来应用map函数。

希望这会有所帮助。

1 个答案:

答案 0 :(得分:1)

发表评论以回答:

import React, { Component } from 'react';
import ReactDOM from 'react-dom';

class Hello extends Component{
    render() {
     return (
         <div>
         <h1>Hello California</h1>   
         </div>
    );
   }
}

ReactDOM.render(<Hello />, document.getElementById("root"));

通常,如果您要将函数应用于数据框的多个列,我们使用## this code vec.levels <- levels(my.vector) factor.vectors <- purrr::map(vec.levels, function(x) which(my.vector == x)) ## seems like an over-complicated version of this split(seq_along(my.vector), my.vector)

lapply