gpt4 book ai didi

r - 将因子组合转换为 R 中存在/不存在的宽格式表

转载 作者:行者123 更新时间:2023-12-04 17:49:58 24 4
gpt4 key购买 nike

首先,我很确定之前已经回答过这个问题,但搜索词似乎很难找到,如果有重复,我深表歉意。

假设我有一个因子向量:

all <- factor(letters)

我继续使用这些因子水平的所有组合作为建模管道的一部分:
combos <- t(combn(as.character(all), 5))
head(combos)
# [,1] [,2] [,3] [,4] [,5]
# [1,] "a" "b" "c" "d" "e"
# [2,] "a" "b" "c" "d" "f"
# [3,] "a" "b" "c" "d" "g"
# ...

我的问题是:如何将第二个矩阵转换为显示所有级别存在/不存在的矩阵,例如:
      a   b   c   d   e   f   g  ...
[1,] 1 1 1 1 1 0 0 ...
[2,] 1 1 1 1 0 1 0 ...
[3,] 1 1 1 1 0 0 1 ...
...

就我所尝试的而言,我的第一个想法是逐行应用 ifelse使用 apply ,但我一直无法将任何可行的东西放在一起。这样做有什么聪明的方法吗?

最佳答案

这是我的尝试:

combos.out <- t(apply(combos, 1, function(x) table(factor(x, levels = letters))))
head(combos.out)
# a b c d e f g h i j k l m n o p q r s t u v w x y z
# [1,] 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# [2,] 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# [3,] 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# [4,] 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# [5,] 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# [6,] 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

WRT @Ananda Mahto 的评论,通过转换和因式分解的操作肯定会减慢速度 - 一个快速而肮脏的基准:
#Unit: milliseconds
# expr min lq median uq max neval
# forfun(combos) 416.6027 534.6973 652.7919 718.4231 784.0544 3
# applyfun(combos) 13892.7020 15755.8570 17619.0121 22559.8271 27500.6421 3

for 得一分环形!

关于r - 将因子组合转换为 R 中存在/不存在的宽格式表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19094360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com