2017-08-09 45 views
0

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

例子:

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” 一个条目例子或在数据,TX是数据等等。以下代码不起作用。我未上市的数据作为一个名为“statteUnlist载体”,如果我只是测试例如==它的工作原理‘或’在下面的代码,但我需要一个适用于循环都要经过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 
+0

请从发布的示例中显示期望的结果。 – Parfait

+0

版本3.3.2使用的库是(XL Connect) –

+0

这是对我的要求的答案吗? – Parfait

回答

2

你可以得到计数data

library(magrittr) 
library(dplyr) 

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

对于那些在df

data2 <- left_join(df, data1, by="state") 
+0

感谢志。我意识到在做一些测试之后我不能使用split和sapply函数,因为我的具有独特状态名称的df必须是数据向量总长度的一个因子。我测试并使其成倍数并得到相同的答案。你的代码将在未来帮助。仅供参考,我没有得到这个警告:'警告信息: 在left_join_impl(x,y,by $ x,by $ y,后缀$ x,后缀$ y): 加入不同层次的因素,胁迫字符向量' –

+0

哦拍摄所以是的,还有另外一个软件包可以运行'%>%'。您需要'magrittr,dplyr'软件包 –

+0

感谢您提醒我关于图书馆。我已经更新了我的答案。 – CPak

-1

然后过滤另一种方式让你的答案是,在“选择”在下面的代码指定列。我忘记说明我的例子中的第一个df是我在第二个“数据”数据框中获得的唯一值的新数据框。如果你给两个数据框,Chi的答案仍然是正确的。

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

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

count((gather(data, State, na.rm = TRUE)), value) 
相关问题