无法将字符值与多列匹配
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
我正在尝试将字符值 "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