如何基于两个向量r找到变化指数

时间:2019-03-17 10:54:28

标签: r

我有两个向量,它们的索引看起来像

index A  index B
   1        1
   1        1
   1        1
   1        2
   1        2
   2        1
   2        1

现在,我想找到索引A和索引B之间每种组合的长度。因此,在我的示例中,索引A和索引B有三种独特的组合,我想在a中取回3、2、2向量。没有人知道如何在没有for循环的情况下这样做吗?

编辑: 因此,在此示例中,存在三个唯一组合(1 1、1 2和2 1),对于这些组合,存在3个组合1 1、2 of 1 2和2 of 21。因此,我想返回3、2 ,2

5 个答案:

答案 0 :(得分:3)

我想这就是你想要的:

library(plyr)
df <- data.frame(index_A = c(1, 1, 1, 1, 1, 2, 2),
                 index_B = c(1, 1, 1, 2, 2, 1, 1))
count(df, vars = c("index_A", "index_B"))
#>   index_A index_B freq
#> 1       1       1    3
#> 2       1       2    2
#> 3       2       1    2

reprex package(v0.2.1)于2019-03-17创建

我是从here那里得到的。

答案 1 :(得分:3)

base R中,我们可以使用table

as.data.frame(table(dat))

答案 2 :(得分:2)

您可以将向量粘贴在一起,然后调用rle

rle(do.call(paste0, dat))$lengths
# [1] 3 2 2

如果您需要将结果作为data.frame,请

as.data.frame(unclass(rle(do.call(paste0, dat))))
#  lengths values
#1       3     11
#2       2     12
#3       2     21

数据

text <- "indexA  indexB
   1        1
   1        1
   1        1
   1        2
   1        2
   2        1
   2        1"

dat <- read.table(text = text, header = TRUE)

答案 3 :(得分:2)

这有点奇怪:

library(dplyr)
df %>% 
  mutate(Combined=paste0(`index A`,"_",`index B`)) %>% 
  group_by(Combined) %>% 
  summarise(n=n())
# A tibble: 3 x 2
  Combined     n
  <chr>    <int>
1 1_1          3
2 1_2          2
3 2_1          2

实际上可以做到:

df %>% 
  group_by(`index A`,`index B`) %>% 
  summarise(n=n())

按照@kath的建议添加tidyr unite

library(tidyr)
df %>% 
  unite(new_col,`index A`,`index B`,sep="_") %>% 
  add_count(new_col) %>% 
  unique()

数据:

df<-read.table(text="index A  index B
   1        1
               1        1
               1        1
               1        2
               1        2
               2        1
               2        1",header=T,as.is=T,fill=T)
df<-df[,1:2]
names(df)<-c("index A","index B")

答案 4 :(得分:1)

使用dplyr

library(dplyr)
count(dat,!!!dat)$n
# [1] 3 2 2