繁体   English   中英

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

[英]How to remove unwanted features in R?

假设我有以下data

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

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

预期产量:

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

如果我们有名称的向量,则使用%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]

您可以通过多种方式执行此操作。 使用which ,可以获得所需列位置的向量,然后仅选择所需列:

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

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

data %>% select_(.dots = list)

(昨天@Kristofersen对这个问题做了很长的答案)是相反的:用逻辑向量进行索引既又安全:我在上面已经给出了一个重要原因:“-which(...)”。 请尝试产生这样一个“不匹配”的示例,并亲自看看。 第二个原因:(偶然)NA的处理:如果逻辑向量包含NA-which(。)全部消除了它们,并且您没有注意到数据中有些“奇怪”(因为这通常是NA在逻辑上的原因)向量。
第三个原因:当出现新的选择条件时,您可以轻松地和/或(即&| )逻辑向量。 整数索引向量的等效项更容易出错((尽管您经常可以在那里使用union()/ intersect()/ setdiff()。)。)使事物保持逻辑更清洁,更安全,并在逻辑周围使用which(.)在R代码的太多地方都可以看到索引向量是一个习惯。 抱歉,我现在没有时间在此进行“演讲”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM