r - 将数据框分为 ID 列(只有一个唯一值)和变量列(具有多个值)
问题描述
我有一个数据框,其中包含几个 ID 列,其中仅包含一个唯一值和实际包含变量的列。如何将它们分开?
我在 sapply 中使用条件语句提出了以下方法,但我想知道是否有更优雅的方法来做到这一点?
我对任何包以及数据帧分开的任何输出都很满意,这也可以在列表中。不需要将每个帧分配给一个新对象。
mydf <- data.frame(a = 'a', b = 'b', val1 = 1:10, val2 = 10:1)
head(mydf,3)
#> a b val1 val2
#> 1 a b 1 10
#> 2 a b 2 9
#> 3 a b 3 8
id_cols <- mydf[sapply(names(mydf), function(x) {length(unique(mydf[[x]])) == 1})]
variable_cols <- mydf[sapply(names(mydf), function(x) {length(unique(mydf[[x]])) != 1})]
head(id_cols, 3)
#> a b
#> 1 a b
#> 2 a b
#> 3 a b
head(variable_cols, 3)
#> val1 val2
#> 1 1 10
#> 2 2 9
#> 3 3 8
由reprex 包(v0.3.0)于 2020 年 4 月 2 日创建
解决方案
一个非常非常短的方法是
Var = lengths(lapply(mydf, unique)) > 1
id_cols = mydf[, Var]
variable_cols = mydf[, !Var]
推荐阅读
- php - 找不到指定的 URL。POST PHP 10 或更多数据
- reactjs - Gutenberg 块在选择元素时显示某些内容
- perl - 使用 websocket 连接请求发送标头 (Mojolicious)
- android - Android工作室中的“AAPT2错误,解析覆盖失败”问题
- c++ - 通过在末尾插入机制创建链表
- javascript - CSS - 表格数据不在固定表格标题下
- ruby - google-api-client 或 google-cloud-ruby
- r - r 包 irr 中的科恩卡帕
- javascript - EmberJS:在计算属性中观察 JavaScript 对象的 getter
- java - 当枚举在类中时,在枚举构造函数中创建类的新实例