我正在尝试编写代码来计算在另一个数据帧的三列中有多少次数据帧的元素。我知道我需要使用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
答案 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)