计算 R 中任意两列中出现某个值的行数

jjm*_*elo 6 r dplyr tidyverse

我有一个这样的数据集:

data <- read.csv(text = "foo,bar
a,b
a,a
b,c
c,a
c,b")
Run Code Online (Sandbox Code Playgroud)

我想计算一个表,告诉我每个可能值出现的行数,所以像这样:

价值 数数
A 3
3
C 3

我尝试使用 dplyr 按两列进行分组,然后进行汇总,但这不会为您提供每个值的计数,而是每个列值的计数。任何想法?

GKi*_*GKi 6

获取unique每行的unlist结果并用于table获取计数。

table(unlist(apply(data, 1, unique)))
#a b c 
#3 3 3 
Run Code Online (Sandbox Code Playgroud)

或者相同但使用管道。

apply(data, 1, unique) |> unlist() |> table()
#a b c 
#3 3 3 
Run Code Online (Sandbox Code Playgroud)


tmf*_*mnk 6

使用dplyrtibbletidyr,您可以执行以下操作:

data %>%
 mutate(across(everything(), trimws)) %>%
 rowid_to_column() %>%
 pivot_longer(-rowid) %>%
 group_by(value) %>%
 summarise(n = n_distinct(rowid))

  value     n
  <chr> <int>
1 a         3
2 b         3
3 c         3
Run Code Online (Sandbox Code Playgroud)


Gre*_*gor 5

read.csv(text="foo,bar\n a,b\n a,a\n b,c\n c,a\n c,b", strip.white = TRUE) |>\n  mutate(id = row_number()) |>\n  pivot_longer(cols = -id) |>\n  distinct(id, value) |>\n  count(value)\n# # A tibble: 3 \xc3\x97 2\n#   value     n\n#   <chr> <int>\n# 1 a         3\n# 2 b         3\n# 3 c         3\n
Run Code Online (Sandbox Code Playgroud)\n