是否可以根据列中的任何值选择R中的列?
我想将我的DF子集以包括在任何行中包含一定值的列。
例如,如果我有:
year = c(1990,1991,1992,1993,1994,1995,1996,1997,1998,1999)
apple = c(1,4,6,8,9,9,2,4,7,4)
orange = c(7,1,5,5,2,1,7,1,3,8)
banana = c(9,9,4,8,1,3,6,7,5,9)
lemon = c(8,3,3,3,2,5,6,7,2,4)
df = data.frame(year,apple,orange,banana,lemon)
df
我只想选择该列中任何位置的列,以便我的DF仅包括Apple和Banana列。
这可能吗?到目前为止,我发现的所有答案仅启用基于列名的选择列,但是我想根据列中的单元格值选择。谢谢你!
I want to subset my df to include only columns that include a certain value in any row.
for example, if I have:
year = c(1990,1991,1992,1993,1994,1995,1996,1997,1998,1999)
apple = c(1,4,6,8,9,9,2,4,7,4)
orange = c(7,1,5,5,2,1,7,1,3,8)
banana = c(9,9,4,8,1,3,6,7,5,9)
lemon = c(8,3,3,3,2,5,6,7,2,4)
df = data.frame(year,apple,orange,banana,lemon)
df
I want to select only the columns that have a 9 anywhere in the column so that my df would become only include the apple and banana columns.
Is this possible? All the answers I've found so far only enable selecting columns based on the column name, but I want to select based on cell values within the column. Thank you!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我们可以在
中传递
中的中的函数,其中 - 检查列是否为数字,如果是数字,请检查是否有任何
值等于到9。此外,可以将将任何(.x == 9)
更改为9%in%.x
。-输出
We can pass a function in
select
withinwhere
- check whether the column is numeric and if that is numeric, check whether there areany
value equal to 9. In addition can change theany(.x ==9)
to9 %in% .x
.-output
基本r
使用过滤器
:输出:输出:
base R
option usingFilter
:Output:
这是漫长的,太冗长了,@akrun已经提供了完美的答案。
因此,这里是另一种方法:
我们在这里做的是
突变
遍历除年
检查它们是否包含9
如果是这样。列的名称为新列,称为x
,然后使用
Any_of
选择This one is long and too verbose and the perfect answer is already provided by @akrun.
Therefore here an alternative approach:
What we do here is
mutate
across
each column exceptyear
check if they contain a9
if so then put the name of column to a new column calledx
,then use
any_of
withselect
大概我们可以使用
colmeans
类似于下面的,如果在列中至少存在一个9
,则平均值应非零Probably we can use
colMeans
like below, where the mean value should be non-zero if there exists at least one9
in the column