【问题标题】:Count character rows meeting multiple criteria in R计算满足 R 中多个条件的字符行
【发布时间】:2021-06-16 20:30:59
【问题描述】:

我正在尝试在大型数据集上计算 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)

要计算苹果的数量,即 num 1 和位置 A-01,我试过这个:

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

但不能让它工作/得到一个错误,说“选择函数'which'的方法:选择了未定义的列”。 sum 函数适用于这个模拟数据,但是当我尝试将它应用到我自己的数据时,它似乎只是将符合我列出的任何标准的行数相加(而不是根据我应用的标准)或说不适用(我知道这是不正确的)。

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

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

还有其他方法可以计算满足多个条件的行数吗? (不知道如何获得计数功能来做到这一点)。我认为我的数据的一个问题是行可能有 NA 值,这可能会干扰 sum 函数。

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

用表格输出计数

Rows meeting multiple conditions

Countif in R

【问题讨论】:

    标签: r count sum


    【解决方案1】:

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

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

    此外,语法将df 和df1 显示为对象名称,而示例对象为“df”


    或者我们也可以使用subset 和nrow

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

    如果有NA 元素,则添加&amp; !is.na(LU) &amp; !is.na(Type) 或使用%in%,因为%in% 对NA 元素返回FALSE 而== 返回NA

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

    【讨论】:

    • 非常感谢您的帮助!
    猜你喜欢
    • 2013-10-14
    • 2020-08-29
    • 2022-12-06
    • 2020-03-07
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    相关资源
    最近更新 更多