【发布时间】:2014-09-30 00:58:08
【问题描述】:
可能有一种明显而优雅的方法可以做到这一点,可能使用 lapply,但我仍在掌握应用命令并且正在努力寻找它。
我有一个如下所示的数据框,除了不是 5 个因子变量,而是有几十个,而不是 10 行,有数百个。
a<- data.frame("id" = c(1:10),
"a1" = factor(c(0,0,1,1,0,1,0,1,0,1)),
"a2" = factor(c(0,0,0,0,0,0,0,0,1,0)),
"a3" = factor(c(0,0,0,0,0,1,0,0,0,0)),
"a4" = factor(c(0,0,0,0,0,0,0,0,1,1)),
"a5" = factor(c(0,0,0,1,0,0,0,0,0,0)))
我想创建一个新变量,如果 13 列中的任何一列包含特定级别的因子,则该变量为 1。示例数据帧中的等价物将创建一个名为“b”的新变量,如果 a1:a4 的任何列中有一个“1”,则该变量为 1,如下所示。
a<- data.frame("id" = c(1:10),
"a1" = factor(c(0,0,1,1,0,1,0,1,0,1)),
"a2" = factor(c(0,0,0,0,0,0,0,0,1,0)),
"a3" = factor(c(0,0,0,0,0,1,0,0,0,0)),
"a4" = factor(c(0,0,0,0,0,0,0,0,1,1)),
"a5" = factor(c(0,0,0,1,0,0,0,0,0,0)),
"b" = c(0,0,1,1,0,1,0,1,1,1))
必须有一种方法可以使用 13 个列位置来执行此操作,而不是为 13 个变量中的每一个变量编写条件 ifthen 语句。
【问题讨论】:
-
这很明显,您需要重塑数据,使其具有“变量”列,然后是包含“a1”、“a2”、“a3”的因子......和值列,包含所有 0 和 1。请参阅 my answer here 了解为什么这会使此类问题变得更容易。
-
谢谢。该链接非常有帮助。使用正则表达式识别列效果很好。
标签: r conditional-statements lapply