无法将字符值与多列匹配

Can't match character value to multiple columns

我正在尝试将字符值 "C" 与数据框中的多个列相匹配。这是框架的一部分:

X1 X2

1  F  F
2  C  C
3  D  D
4 A# A#

以下是我尝试匹配值 "C" 时发生的情况:

> "C" %in% frame[, 1]
[1] TRUE
> "C" %in% frame[, 1:2]
[1] FALSE

考虑到 "C" 在两列中,我不明白为什么它返回 false。是否有函数或运算符可以测试一个值是否存在于多列中?我的目标是创建一个函数,该函数可以对在指定列中找到 "C" 等字符值的次数求和。

尝试:

apply(frame, 2, function(u) "C" %in% u)

您也可以使用 is.element:

apply(frame, 2, function(u) is.element("C",u))

您可能想在这里使用 grepl,其中 returns 是一个逻辑向量。然后你可以用 sum.

来计算出现的次数
> frame
   X1 X2
 1  F  F
 2  C  C
 3  D  D
 4 A# A#
> grepl('C', frame$X1)
 [1] FALSE  TRUE FALSE FALSE
> sum(grepl('C', frame$X1))
 [1] 1

并计算每列中 C 的总数,您可以使用 lapply (注意:apply 更适合矩阵,而不是数据帧 列表。)

> sum(unlist(lapply(frame, function(col) grepl('C', col))))
 [1] 2