我对R很陌生,并且遇到了一个问题,我认为该问题很容易解决,但找不到答案。
我有一个名为 clg 的数据框,其中基本上有3列date, X1, X2
。
X1
和X2
是国家/地区小组的名称。 X1
和X2
具有相同的国家/地区列表。
我只是想计算两列中每个国家的总数。
到目前为止,我只能计算X1
列的出现频率,但是我没有找到将两列相加的方法。
clt <- as_tibble(na.omit(count(clg, clg$X1)))
我想获得一个数据框,在第一列中我具有唯一的国家/地区,在第二列中X1 + X2
中出现的总数。
答案 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))