[英]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.