【发布时间】:2014-12-30 07:37:21
【问题描述】:
我有一个 data.frame L1States_df,看起来像这样:
BoltOn CutOn IdleOn PumpOn
1 FALSE FALSE FALSE FALSE
2 FALSE FALSE TRUE FALSE
3 FALSE FALSE TRUE FALSE
4 FALSE FALSE TRUE FALSE
5 FALSE FALSE TRUE FALSE
6 FALSE FALSE FALSE TRUE
对于L1States_df 的每一行,可以有一个或没有(零)TRUE,其余为FALSE。
我想为每一行创建一个新向量:
- 与 TRUE 关联的列的名称(如果该行上有 TRUE)
- 如果此行没有任何 TRUE,则不适用
所需输出示例:
State
1 NA
2 "IdleOn"
3 "IdleOn"
4 "IdleOn"
5 "IdleOn"
6 "PumpOn"
我试过了:
apply(L1States_df,1,function(x) names(which(x==TRUE)))
但是当在线上没有TRUE 时不会生成NA,所以我放了一个IFELSE:
apply(L1States_df,1,function(x) ifelse(is.null(names(which(x==TRUE))),NA,names(which(x==TRUE))))
有没有更好/更快的方法,或者是否有一个预定义的函数可以做这种事情(可能是data.table)?
加分:虽然它不应该发生,只是为了安心:如果在特定行上有多个 TRUE,我怎么能生成 NA?
【问题讨论】: