Countif:一个数据框中的元素在另一个数据框中的次数

Countif: How many times element in one dataframe is in another dataframe

我正在尝试编写代码来计算我在另一个数据帧的三列中有多少次数据帧的 1 个元素。我知道我需要使用应用循环,但不确定如何编写它。

示例:

df

   state
1     OR
2     TX
3     MI
4     MA
5     IA
6     CA

数据

ST  ST2 ST3
OR      
        MI
        SC
        TN
TX      
        KY
        OH
        MN
MI      
        IA
        NC
        MA
        MI
MA      
        KY
        MI
IA      
        IA
    MO  
CA      
        TN
    PA  
        KY
IL      

我想知道 "df" 中的条目有多少次,例如 OR 在数据中,TX 在数据中等等。下面的代码不起作用。我将未列出的数据作为一个名为“statteUnlist”的向量,如果我只是在下面的代码中测试 == "OR",它就可以工作,但我需要一个应用循环来遍历 df.

的所有条目
length(which(stateUnlist == df$state))

上面的代码不起作用,但下面的代码可以。如何遍历 df 的所有条目?

length(which(stateUnlist == "OR"))

下面是期望的结果(仅供参考,这些是 excel 的总数据,因此总数会有所不同)

   state n
1     OR 2
2     TX 2
3     MI 8
4     MA 4
5     IA 6
6     CA 2
7     IL 8
8     MO 2
9     PA 2
10    SC 2
11    TN 4
12    KY 6
13    OH 2
14    MN 2
15    NC 2

您可以使用

获得 data 的计数
library(magrittr)
library(dplyr)

data1 <- data.frame(table(unlist(data))) %>%
           setNames(c("state","n"))

然后筛选 df

中的那些
data2 <- left_join(df, data1, by="state")

获得答案的另一种方法是在下面代码的 'select' 中指定您的列。我忘了指出我示例中的第一个 df 只是我在第二个 'data' 数据框中获得的唯一值的新数据框。如果给定两个数据框,Chi 的答案仍然正确。

data %>%
select(ST:ST3) %>%
gather(key, value, na.rm = TRUE) %>%
count(value)

或者您可以使用下面的代码引用整个数据框。 'State' 只是收集后列名称的示例,值是所有列中收集值的默认列 2。您不想将列命名为 'value',因为它会重复列名。

count((gather(data, State, na.rm = TRUE)), value)