计算满足 R 中多个条件的字符行

Count character rows meeting multiple criteria in R

我正在尝试计算大型数据集上 R 中满足多个条件(不同列中的条件)的行数,但在获得我想要的结果时遇到了一些问题。

示例数据框:

LU <- c("A", "A", "P", "P", "A", "G", "A", "G") 
Type <- c("one", "one", "one", "three", "two", "three", "one", "two") 
Style <- c("C-acq", "C-acq", "C-acq", "N-acq", "C-acq", "Ox", "C-acq", "N-acq")
df <- data.frame(LU, Type, Style)

为了计算位置为 A-01 的苹果数量,我试过这个:

length(intersect(which(df1['LU']=="A", which(df['Type']=="one"))))

但无法将其设置为 work/get 错误,提示“函数 'which' 的选择方法:未定义的列已选择”。 sum 函数适用于这个模拟数据,但是当我尝试将它应用于我自己的数据时,它似乎只是将符合我列出的任何标准的行数相加(而不是根据我应用的标准)或说 NA(我知道这是不正确的)。

我用过的求和函数(适用于这个迷你数据,但不适用于我的数据):

sum(df1$LU == "A" & df1$Type == "one" & df1$Style == "C-acq")

是否有另一种方法可以计算满足多个条件的行数? (不确定如何让计数函数执行此操作)。我认为我的数据存在一个问题,即行可能具有 NA 值,这可能会干扰求和函数。

我知道有很多关于这样的问题(下面列出的其他线程),所以如果这是一个多余的问题但找不到适合我的数据的答案,我很抱歉。感谢您的帮助!

计数 table 输出

Rows meeting multiple conditions

这里我们需要使用 [[ 提取为 vector 或添加 , (使用 tibble/data.table 它可能不起作用)或使用 $.还有,第一个which没有关闭

length(intersect(which(df[['LU']]=="A"), which(df[['Type']]=="one")))
#[1] 3

此外,语法将 dfdf1 显示为对象名称,而示例对象是 'df'


或者我们也可以使用 subsetnrow

nrow(subset(df, LU == "A" & Type == "one"))
#[1] 3

如果有 NA 个元素,添加 & !is.na(LU) & !is.na(Type) 或使用 %in% 作为 %in% returns FALSE 用于 NA 元素,而 == returnsNA

nrow(subset(df, LU %in% "A" & Type %in% "one"))