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

时间:2017-08-09 23:33:12

标签: r lapply countif mapply

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

示例:

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”,它就可以工作,但我需要一个apply循环来遍历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

2 个答案:

答案 0 :(得分:2)

您可以使用

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

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

然后过滤df

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

答案 1 :(得分:-1)

获得答案的另一种方法是在下面的代码中的“选择”中指定列。我忘了指出我的例子中的第一个df只是我在第二个“数据”数据框中得到的唯一值的新数据帧。如果给出两个数据框,Chi的答案仍然是正确的。

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

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

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