r - 按名称循环R中的变量子集
问题描述
数据框have
包含几千个变量。一个变量是一个治疗指标,称为treatgrp
包含值 1、2 或 3)。其他五个变量称为:g_cA
、r_cA
、g_ccA
、r_ccA
和g_grp
。它们没有按顺序出现。
我想生成treatgrp
与其他五个感兴趣的变量进行比较的频率表。我目前使用一些墙纸语法这样做:
table(have$treatgrp, have$g_cA, deparse.level = 2)
table(have$treatgrp, have$r_cA, deparse.level = 2)
table(have$treatgrp, have$g_ccA, deparse.level = 2)
table(have$treatgrp, have$r_ccA, deparse.level = 2)
table(have$treatgrp, have$g_grp, deparse.level = 2)
这可以完成工作。但我想调用table()
一次并遍历五个不同的感兴趣变量。我试过这样做:
myvars <- c("g_cA", "r_cA", "g_ccA", "r_ccA", "g_grp")
for (i in 1:length(myvars)){
table(have$treatgrp, have[,myvars[i]], deparse.level = 2)
}
这不会导致错误消息,但它也不会返回任何输出表。
基于这个问题,很明显我已经习惯了 SAS 中的宏和数组。但我想学习至少一种方法来解决这个问题。我必须一直做类似的事情,找出一个更优雅的解决方案可以为我节省很多时间。
解决方案
以iris
数据集为例,这可以使用lapply
吗?
iris$var1 <- sample(letters, 150, replace = T)
iris$var2 <- sample(letters, 150, replace = T)
iris$var3 <- sample(letters, 150, replace = T)
myvars <- c("var1", "var2", "var3")
lapply(iris[myvars], function(x) table(iris$Species, x))
# $var1
# x
# a b c d e f g h i j k l m n o p q r s t u v w x y z
# setosa 1 1 0 3 2 2 0 1 2 4 2 1 1 4 3 1 4 0 3 0 4 3 3 2 0 3
# versicolor 3 1 2 3 0 4 1 3 5 0 1 0 1 3 5 2 2 1 5 1 2 0 1 1 1 2
# virginica 4 0 1 1 3 4 2 1 2 1 2 4 1 1 1 2 2 2 3 3 0 2 2 2 3 1
# $var2
# x
# a b c d e f g h i j k l m n o p q r s t u v w x y z
# setosa 3 1 1 3 3 3 2 2 2 2 1 1 2 1 0 4 1 2 2 4 4 3 2 0 1 0
# versicolor 3 0 1 1 5 3 3 3 2 2 1 2 2 4 1 4 2 3 2 0 2 1 2 1 0 0
# virginica 0 2 1 4 3 0 0 1 1 0 4 2 3 2 1 2 0 3 2 2 2 0 2 2 5 6
# $var3
# x
# a b c d e f g h i j k l m n o p q r s t u v w x y z
# setosa 4 2 4 2 0 4 0 3 3 2 0 1 2 0 0 2 1 3 2 1 1 2 2 1 5 3
# versicolor 0 3 1 3 1 1 1 0 1 1 3 2 1 0 0 4 4 1 3 6 2 2 2 3 2 3
# virginica 3 0 3 3 2 0 3 1 1 2 0 2 4 4 1 4 1 3 4 0 1 1 2 3 2 0
或使用相同的东西purrr::map
:
library(purrr)
map(iris[myvars], function(x) table(iris$Species, x))
推荐阅读
- python - “TypeError:泛型类型的参数必须是类型。得到 0。” 在我的功能中
- php - 从 Woocommerce 单个产品评论标题中删除产品标题
- macos - TCP KeepAlive 机制在 MacOS 上不起作用
- hash - DPDK - RSS 卸载(哈希计算):ETH_RSS_IPV6_EX - 解释
- java - 在 Keystore Junit 测试用例中获取 mockito 异常
- blazor - Fresh Blazor Webassembly Template CLI v5.0.100 产生“未经授权”
- nsdate - NSPredicateEditor:过滤 NSDate 对象中的月份
- angular - 如何在 Angular 单元测试中使用 auditTime() 测试 Observable
- c# - 覆盖 ContentPage 的 ContentProperty 时如何修复 XAML 中的“属性内容设置不止一次”错误
- node.js - 续集一对多插入不起作用?