这是对this question的跟进。 @Sotos为该问题提供了正确的答案,但实际上我的问题是从理论上讲的。
我知道这可能并不完全实用,但这更多是出于好奇。 如何按名称访问“否定选择”(删除)的命名对象的命名属性?
“正向选择”很简洁:
data.frame(year = 1996:1998, group = letters[1:3]) ['group']
group
1 a
2 b
3 c
但是following this approach对于“否定选择”可能会很快变得麻烦,尤其是对于较大的数据帧:
data.frame(year = 1996:1998, group = letters[1:3])[!names(data.frame(year = 1996:1998, group = letters[1:3])) %in% 'year']
group
1 a
2 b
3 c
我知道您可以使用subset
或dplyr::select
:
data.frame(year = 1996:1998, group = letters[1:3]) %>% select(- year)
# or
subset(data.frame(year = 1996:1998, group = letters[1:3]), select = -year)
group
1 a
2 b
3 c
但是我想知道是否还有其他方法,基于使用[
进行选择,例如使用foo[!names %in% x]
解决方案而无需事先为foo
赋予名称,也不必繁琐的重复数据框,如我的示例代码所示。