在几列中计数相同值的频率

时间:2019-07-25 10:18:08

标签: r

我对R很陌生,并且遇到了一个问题,我认为该问题很容易解决,但找不到答案。

我有一个名为 clg 的数据框,其中基本上有3列date, X1, X2X1X2是国家/地区小组的名称。 X1X2具有相同的国家/地区列表。

我只是想计算两列中每个国家的总数。

到目前为止,我只能计算X1列的出现频率,但是我没有找到将两列相加的方法。

clt <- as_tibble(na.omit(count(clg, clg$X1)))

我想获得一个数据框,在第一列中我具有唯一的国家/地区,在第二列中X1 + X2中出现的总数。

3 个答案:

答案 0 :(得分:2)

您可以使用unlist()table()来获取总数。将其包装在data.frame()中将为您提供所需的两列输出。

clg <- data.frame(date=1:3, 
                  X1=c("nor", "swe", "alg"), 
                  X2=c("swe", "alg", "jpn"))

data.frame(table(unlist(clg[c("X1", "X2")])))
#   Var1 Freq
# 1  alg    2
# 2  nor    1
# 3  swe    2
# 4  jpn    1

答案 1 :(得分:0)

您可以通过两个步骤来实现目标。在第一步中,您将计算每个国家/地区的发生总数。在下一步中,您要将两个df结合在一起并计算总和。

   X1_sum <- df %>%
      dplyr::group_by(X1) %>%
      dplyr::summarize(n_x1 = n())

   X2_sum <- df %>%
      dplyr::group_by(X2) %>%
      dplyr::summarize(n_x2 = n()

   final_summary <- X1_sum %>%
      # merging data with by country names
      dplyr::left_join(., X2_sum, by = c("X1", "X2")) %>%
      dplyr::mutate(n_sum = n_x1 + n_x2)

答案 2 :(得分:0)

使用tidyverse,我们可以将gather转换为'long'格式,然后执行count

library(tidyverse)
gather(clg, key, Var1, -date) %>%
     count(Var1)
# A tibble: 4 x 2
#  Var1      n
#  <chr> <int>
#1 alg       2
#2 jpn       1
#3 nor       1
#4 swe       2

数据

clg <- structure(list(date = 1:3, X1 = structure(c(2L, 3L, 1L), .Label = c("alg", 
"nor", "swe"), class = "factor"), X2 = structure(c(3L, 1L, 2L
), .Label = c("alg", "jpn", "swe"), class = "factor")),
   class = "data.frame", row.names = c(NA, 
-3L))