在我的数据集test
中,我想基于两列 - start
和end
生成频率表。我的目标是每行只计算一次独特的字母,即使它出现在两列中。例如,在第一行中,“C”应仅计为一行。在第4行中,“B”应计算一次,“A”应计算一次,因为它们不相同。我知道我应该以某种方式使用unique()
函数但不确定如何将其与table()
组合以生成频率表,该频率表将连续重复的字母计为一个(NA
值应该省略)。任何建议,将不胜感激。
> test
start end
1 C C
2 A <NA>
3 <NA> <NA>
4 B A
5 A A
6 <NA> A
7 <NA> B
8 <NA> C
9 A <NA>
10 C C
下表的输出应为:
> output
station Freq
1 A 5
2 B 2
3 C 3
测试数据:
> dput(test)
structure(list(start = c("C", "A", NA, "B", "A", NA, NA, NA,
"A", "C"), end = c("C", NA, NA, "A", "A", "A", "B", "C", NA,
"C")), .Names = c("start", "end"), row.names = c(NA, -10L), class = "data.frame")
答案 0 :(得分:4)
这个怎么样?
group
output<- table(unlist(apply(test, 1, unique)))
output
A B C
5 2 3
不是一个非常有效的函数,因为它是一个美化的apply
循环,但在这种情况下它会正常工作。