我正在使用R。
我有一个看起来像这样的数据库:
Price A Price B
1 3
3 2
1 3
2 4
3 2
3 2
3 3
我想做的是计算每对夫妇的出现次数(价格A,价格B),并知道哪对夫妇最突出(比方说三对突出),以及它们的出现频率。
我真的不知道该怎么做。
例如此处:
(3,2):3次
(1,3):2次
(2,4):1次
(3,3):1次
感谢您的帮助
马克
答案 0 :(得分:1)
dplyr
的可能性可能是:
df %>%
group_by_all() %>%
tally()
Price_A Price_B n
<int> <int> <int>
1 1 3 2
2 2 4 1
3 3 2 3
4 3 3 1
或与count()
相同的结果:
df %>%
count(Price_A, Price_B)
或者如果您希望将两列的组合作为一列:
df %>%
mutate(Price_comb = paste(Price_A, Price_B, sep = ",")) %>%
count(Price_comb)
Price_comb n
<chr> <int>
1 1,3 2
2 2,4 1
3 3,2 3
4 3,3 1
答案 1 :(得分:1)
使用基数R
:df.new <- as.data.frame(with(df, table(Price.A, Price.B)))
或@ {Ronak Shah指出的df.new <- as.data.frame(table(df))
# output df.new
Price.A Price.B Freq
1 1 2 0
2 2 2 0
3 3 2 3
4 1 3 2
5 2 3 0
6 3 3 1
7 1 4 0
8 2 4 1
9 3 4 0
df.new[df.new$Freq != 0, ]
# Price.A Price.B Freq
3 3 2 3
4 1 3 2
6 3 3 1
8 2 4 1
数据
df <- structure(list(Price.A = c(1L, 3L, 1L, 2L, 3L, 3L, 3L), Price.B = c(3L,
2L, 3L, 4L, 2L, 2L, 3L)), .Names = c("Price.A", "Price.B"), class = "data.frame", row.names = c(NA,
-7L))
答案 2 :(得分:0)
这可以通过SQL查询轻松完成,因此让我们尝试使用sqldf
包:
library(sqldf)
sql <- "SELECT price_a, price_b, COUNT(*) AS frequency
FROM your_df
GROUP BY price_a, price_b
ORDER BY frequency DESC"
result <- sqldf(sql)
答案 3 :(得分:0)
使用tidyverse
的另一种summarise
方法允许您指定新列的名称。
您的数据:
df <- structure(list(PriceA = c(1, 3, 1, 2, 3, 3, 3), PriceB = c(3,
2, 3, 4, 2, 2, 3)), class = c("spec_tbl_df", "tbl_df", "tbl",
"data.frame"), row.names = c(NA, -7L), spec = structure(list(
cols = list(PriceA = structure(list(), class = c("collector_double",
"collector")), PriceB = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 2), class = "col_spec"))
解决方案:
library(tidyverse)
df %>%
group_by(PriceA, PriceB) %>%
summarise(Freq = n())
# A tibble: 4 x 3
# Groups: PriceA [3]
PriceA PriceB Freq
<dbl> <dbl> <int>
1 1 3 2
2 2 4 1
3 3 2 3
4 3 3 1