我有以下数据框:
Day A1 A2 B1 B2 C1 C2
Mon 1 0 0 1 0 1
Tue 1 0 1 0 0 1
Wed 0 1 1 0 1 0
Thu 0 1 0 1 1 0
df <- data.frame(A1=c(1,1,0,0),A2=c(0,0,1,1),B1=c(0,1,1,0),B2=c(1,0,0,1),C1=c(0,0,1,1),C2=c(1,1,0,0), row.names=c('Mon','Tue','Wed','Thu'))
我希望得到X1 = 1和X2 = 0的日期,按字母分类。例如,对于字母A,Mon和Tue匹配标准A1 = 1和A2 = 0。
输出为:
清单:
$A
Mon
Tue
$B
Tue
Wed
$C
Wed
Thu
或数据框:
Lett Day
A Mon
A Tue
B Tue
B Wed
C Wed
C Thu
我尝试了以下内容:
对于A:
A <- df$A1 == 1 & df$A2 == 0
我会得到一个逻辑矢量,如:
T
T
F
F
然后将它们与初始db的日期匹配:
A <- cbind(db[1], A)
过滤“TRUE”值以获得输出
A
Mon
Tue
我可以为每个字母做这个,但脚本太长了,问题是我可以有任意数量的字母(A,B ...... Z)
答案 0 :(得分:2)
这是使用split.default
的一种方式:
grped.cols <- split.default(df, substr(names(df), 1, 1))
cond <- function(x) row.names(df)[x[1] & ! x[2]]
lapply(grped.cols, cond)
# $A
# [1] "Mon" "Tue"
#
# $B
# [1] "Tue" "Wed"
#
# $C
# [1] "Wed" "Thu"