【问题标题】:Apply a function for each pair of columns in R为 R 中的每对列应用一个函数
【发布时间】:2013-11-11 20:45:42
【问题描述】:

我有以下数据框:

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)

【问题讨论】:

  • 你能说清楚X1和X2是什么吗?
  • @Metrics 很确定 X 是通配符 * 的每个字母:A、B、C...
  • 没错,X = {A, B, .. Z)

标签: r dataframe


【解决方案1】:

这是使用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"

【讨论】:

    猜你喜欢
    • 2021-10-25
    • 1970-01-01
    • 2021-09-23
    • 2011-07-11
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    相关资源
    最近更新 更多