【发布时间】:2020-06-16 19:12:53
【问题描述】:
我知道这个问题很简单,但我有一个更具体的问题:
我有一个数据框,包含 50 个变量(数字和非数字)和 5000 个观察值。
现在我要做的是创建另一个数据框,其中仅包含原始数据框的数值变量。
在这个网站上我找到了我的问题的解决方案,即:
numeric_variables<-unlist(lapply(original_data,is.numeric))
X<-original_data[numeric_variables]
但我想知道:为什么如果我这样尝试,它却不起作用?怎么了?
numeric_variables2<-apply(original_data,2,is.numeric)
x<-original_data[numeric_variables2]
【问题讨论】:
-
apply转换为matrix并且矩阵可以有单一类型,因此,如果有字符列,它本质上是转换为字符类型。用tidyverse检查cbind(1:5, LETTERS[1:5]),是original_data %>% select_if(is.numeric)或iris %>% select(where(is.numeric)) -
试试
Filter(is.numeric, df1) -
例如更好的是
iris[mapply(is.numeric, iris)] -
@markus,不起作用
-
好的,重新关闭,保留 Markus 关于如何选择数字列的骗局,但还添加了一个骗局,说明
apply将事物转换为矩阵,从而丢失了类信息。有了 akrun 的评论,希望这足以引导任何发现这个问题的人朝着正确的方向前进。
标签: r dataframe subset predicate