【发布时间】:2017-02-09 11:42:32
【问题描述】:
我需要在我的数据表中创建一个新列,其中包含所有列名的字符串,具体取决于每行中的值。
在下面的示例中,我只想返回行中所有值都大于 1 的列名,但这可能会改变。列名将用作回归模型中的公式。
这样做的原因是我想为每组建立一个模型,但在每组中,一些变量的方差为零。有些也是分类/因素,但只有 1 个级别,因此我可以根据列名从模型中排除这些变量。
结果列是所需输出的示例数据表。
dt <- data.table(dept = c("a", "b", "c", "d", "e"),
x1 = c(1,2,3,4,5),
x2 = c(5,4,3,2,1),
Result = c("x1", "x1 + x2", "x1 + x2", "x1 + x2", "x2"))
【问题讨论】:
-
用
apply(dt[,2:3]>1,1,function(x) ifelse(length(colnames(dt)[2:3][x])>1,paste0(colnames(dt)[2:3][x],collapse="+"),colnames(dt)[2:3][x]) )你得到[1] "x2" "x1+x2" "x1+x2" "x1+x2" "x1",你能确认你的预期结果吗 -
我的数据表中的“结果”列是预期的结果。
-
你如何解释条件
rowObs >1与结果第 1 行和第 5 行 -
如果你只有两列,你可以做
c(NA, "x1", "x2", "x1 + x2")[1 + (dt[["x1"]] > 1) + 2 * (dt[["x2"]] > 1)],这可能是人们可能想到的最快的解决方案(借用this)
标签: r data.table