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

How to remove unwanted features in R?

假设我有以下 data:

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

给定一个预定义的英文单词列表,如何使用 which(.. %in% ..) 运算符获取向量位置,以便只保留预定义的英文单词列表中存在的特征?

预期输出:

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

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

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

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

data %>% select_(.dots = list)

如果我们有名称向量,则使用 %in%

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

如果您有要保留的列名列表,您可以运行这样:

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

如果您有不想保留的列名列表,您可以运行这样:

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

如果您使用的是 data.table,则必须包含 with=FALSE 才能正常工作。

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

(@Kristofersen 昨天对问题的长回答)恰恰相反:使用逻辑向量进行索引 很好 并且更安全:我已经在上面给出了一个重要原因:“-哪个(...)”。请尝试生成这样一个 'no match' 示例并亲自查看。 第二个原因:处理(意外的)NA:如果你的逻辑向量包含 NA - which(.) 全部消除它们并且你没有注意到你的数据中有一些东西 "strange" (因为这通常是 NA 的原因一个逻辑向量。
第三个原因:当出现新的选择条件时,您可以轻松 and/or (即 &|)逻辑向量。整数索引向量的等价物更容易出错((尽管你经常可以在那里使用 union() / intersect() / setdiff() ..))保持逻辑更清晰,更安全,并使用 which(.)用于索引的逻辑向量是一种 不好的 做法,在 R 代码中的很多地方都可以看到。抱歉,我现在没有时间 "lecture"。