如何删除R中不需要的功能?

时间:2016-11-22 15:44:49

标签: r feature-selection

假设我有以下data

             'aaa'     'a'     'aaron'     'abcde'     'azz'
        x1    ...      ...       ...         ...        ...
        x2    ...      ...       ...         ...        ...
        x3    ...      ...       ...         ...        ...

给定预定义的英语单词列表,如何使用which(.. %in% ..)运算符来获取向量位置,以便仅保留预定义的英语单词列表中存在的要素?

预期产出:

     'a'     'aaron'    
x1    ...      ...       
x2    ...      ...      
x3    ...      ...       

4 个答案:

答案 0 :(得分:4)

如果我们有一个名字矢量,那么请使用%in%

df1[,colnames(df1) %in% v1]

答案 1 :(得分:2)

如果您有要保留的列名列表,则可以运行此命令:

dat = dat[, colnames(dat) %in% list]

如果你有一个你不想留下的列名列表,你可以运行它:

dat = dat[, !(colnames(dat) %in% list)]

如果你正在使用data.table,你必须包含= FALSE才能使用。

dat = dat[, colnames(dat) %in% list, with = FALSE]

答案 2 :(得分:1)

你可以通过多种方式做到这一点。使用which,您可以获得所需列位置的向量,然后只选择所需的列:

cols <- which(colnames(data) %in% list)
data[cols]

另一种方法是使用dplyr的select:

data %>% select_(.dots = list)

答案 3 :(得分:1)

(昨天@Kristofersen对这个问题的答案很长)反之亦然:使用逻辑向量进行索引是并且更安全:我已经给出了一个重要原因:&#34 ;哪位(...)&#34 ;.请尝试制作这样一个“不匹配”的作品。例子,看看你自己。 第二个原因:处理(意外)NA&#39; s:如果你的逻辑向量包含NA&#39; s(。)都消除了它们,而你没有注意到某些东西是&#34;奇怪的&#34;使用您的数据(因为这通常是NA在逻辑矢量中的原因 第三个原因:当新的选择条件出现时,您可以轻松地和/或(即&|)逻辑向量。整数索引向量的等价物更容易出错((尽管你经常可以使用union()/ intersect()/ setdiff())。)保持逻辑更清晰,更安全,并使用which(.)用于索引的逻辑向量是一种糟糕实践,在R代码的太多地方都可以看到。我没有时间参加#34;讲座&#34;现在,对不起。