假设我有以下data
:
'aaa' 'a' 'aaron' 'abcde' 'azz'
x1 ... ... ... ... ...
x2 ... ... ... ... ...
x3 ... ... ... ... ...
给定预定义的英语单词列表,如何使用which(.. %in% ..)
运算符来获取向量位置,以便仅保留预定义的英语单词列表中存在的要素?
预期产出:
'a' 'aaron'
x1 ... ...
x2 ... ...
x3 ... ...
答案 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;现在,对不起。