【问题标题】:Logical Operators in RR中的逻辑运算符
【发布时间】:2020-06-29 01:21:32
【问题描述】:

我的目标是计算 A 列和 B 列中有多少匹配项

answer = length(which(DF$A=="English" & which(DF$B=="English")))

我在此尝试时遇到错误。在 R 中编写这行代码的正确方法是什么?

【问题讨论】:

  • 你不需要第二个which,如果你不单独计算每一列,sum(DF$A == 'English' & DF$B == 'English') 也应该可以工作
  • 或者,您可以使用 intersect: length(intersect(which(...), which(...)))

标签: r logical-operators


【解决方案1】:

如果您想要 A 和 B 都有“English”的行数, 你可以使用sum。要获取相应的行号,请使用which,如下所示:

# Number of rows
sum(DF$A == 'English' & DF$B == 'English')
# Row numbers 
which(DF$A == 'English' & DF$B == 'English')

同样,如果您对A 和B 中至少一个 有这个词的情况感兴趣,请使用;

sum(DF$A == 'English' | DF$B == 'English')
which(DF$A == 'English' | DF$B == 'English')

例子

DF
#          A       B
# 1  English English
# 2  English English
# 3  English English
# 4  English English
# 5  English English
# 6  English       p
# 7  English       q
# 8  English       r
# 9        i       s
# 10       j       t
    
sum(DF$A == 'English' & DF$B == 'English')
#[1] 5

sum(DF$A == 'English' | DF$B == 'English')
#[1] 8

您可以使用which 获取行号

which(DF$A == 'English' & DF$B == 'English')
# [1] 1 2 3 4 5

which(DF$A == 'English' | DF$B == 'English')
# [1] 1 2 3 4 5 6 7 8

数据

DF <- structure(list(A = c("English", "English", "English", "English", "English", "English", "English", "English", "i", "j"),
                     B = c("English", "English", "English", "English", "English", "p", "q", "r", "s", "t")), class = "data.frame",
                row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多