gpt4 book ai didi

r - 如何在R中找到相等的列?

转载 作者:行者123 更新时间:2023-12-02 11:25:30 25 4
gpt4 key购买 nike

鉴于以下情况:

a <- c(1,2,3)
b <- c(1,2,3)
c <- c(4,5,6)
A <- cbind(a,b,c)

我想找到 A 中的哪些列等于我的向量 a。

我的第一次尝试是:
> which(a==A)
[1] 1 2 3 4 5 6

哪个没有这样做。 (老实说,我什至不明白那是做什么的)
第二次尝试是:
a==A
a b c
[1,] TRUE TRUE FALSE
[2,] TRUE TRUE FALSE
[3,] TRUE TRUE FALSE

这绝对是朝着正确方向迈出的一步,但它似乎扩展到了一个矩阵中。我更喜欢的是像其中一行那样的东西。如何将向量与列进行比较,以及如何在矩阵中找到等于向量的列?

最佳答案

使用 identical .那就是 R 的“标量”比较运算符;它返回单个逻辑值,而不是向量。

apply(A, 2, identical, a)
# a b c
# TRUE TRUE FALSE

A是真实情况下的数据框,最好使用 sapplyvapply因为 apply将它的输入强制转换为矩阵。
d <- c("a", "b", "c")
B <- data.frame(a, b, c, d)

apply(B, 2, identical, a) # incorrect!
# a b c d
# FALSE FALSE FALSE FALSE

sapply(B, identical, a) # correct
# a b c d
# TRUE TRUE FALSE FALSE

但请注意 data.frame除非您另有要求,否则将字符输入强制为因子:
sapply(B, identical, d) # incorrect
# a b c d
# FALSE FALSE FALSE FALSE

C <- data.frame(a, b, c, d, stringsAsFactors = FALSE)
sapply(C, identical, d) # correct
# a b c d
# FALSE FALSE FALSE TRUE

同样也比使用 all 快得多+ == :
library(microbenchmark)

a <- 1:1000
b <- c(1:999, 1001)

microbenchmark(
all(a == b),
identical(a, b))
# Unit: microseconds
# expr min lq median uq max
# 1 all(a == b) 8.053 8.149 8.2195 8.3295 17.355
# 2 identical(a, b) 1.082 1.182 1.2675 1.3435 3.635

关于r - 如何在R中找到相等的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12971348/

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