Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 确定子集行中出现的最多/最少数量&;数据帧中的列组_R_Dataframe_Dplyr - Fatal编程技术网

R 确定子集行中出现的最多/最少数量&;数据帧中的列组

R 确定子集行中出现的最多/最少数量&;数据帧中的列组,r,dataframe,dplyr,R,Dataframe,Dplyr,我试图在一个较大的数据框中查找行/列组中最多和最少的项。以下是更清楚的数据: df <- data.frame(matrix(nrow = 8, ncol = 3)) df$X1 <- c(1, 1, 1, 2, 2, 3, 3, 3) df$X2 <- c("yellow", "green", "yellow", "blue", NA, "orange", NA, "orange") df$X3 <- c("green", "yellow", NA, "blue",

我试图在一个较大的数据框中查找行/列组中最多和最少的项。以下是更清楚的数据:

df <- data.frame(matrix(nrow = 8, ncol = 3))
df$X1 <- c(1, 1, 1, 2, 2, 3, 3, 3)
df$X2 <- c("yellow", "green", "yellow", "blue", NA, "orange", NA, "orange") 
df$X3 <- c("green", "yellow", NA, "blue", "red", "purple" , "orange", NA) 
names(df) <- c("group", "A", "B")

df解决方案使用
dplyr
tidyr
。策略是找到“最多”和“最少”项,并准备一个新的数据框架。然后,使用
right\u join
合并原始数据帧并准备所需的输出

请注意,在这个过程中,我使用了
slice
对数据帧进行子集划分,以获得最多和最少的项。这保证了每组只有一个“最多”和一个“最少”。尽管如此,每个小组都有可能打成平局。如果发生这种情况,你可能会想一想什么是一个好的规则来确定哪一个是“最”的或哪一个是“最少的”

库(dplyr)
图书馆(tidyr)
df2%
聚集(列,值,-组,na.rm=TRUE)%>%
计数(组、值)%>%
排列(组,描述(n))%>%
分组依据(分组)%>%
切片(c(1,n())%>%
变异(类型=c(“最”、“最”和“最少”))%>%
选择(-n)%>%
排列(类型、值)%>%
右键联接(df,by=“group”)%>%
选择(c(colnames(df),“most”,“least”))
df2
#一个tibble:8x5
A、B组最差
1黄绿色黄绿色
2 1绿色-黄色-黄色-绿色
3 1黄-黄-绿
4 2蓝-蓝-红
5.2红蓝红
橙紫橙紫
7.3橙橙紫
8.3橙橙紫

解决方案使用
dplyr
tidyr
。策略是找到“最多”和“最少”项,并准备一个新的数据框架。然后,使用
right\u join
合并原始数据帧并准备所需的输出

请注意,在这个过程中,我使用了
slice
对数据帧进行子集划分,以获得最多和最少的项。这保证了每组只有一个“最多”和一个“最少”。尽管如此,每个小组都有可能打成平局。如果发生这种情况,你可能会想一想什么是一个好的规则来确定哪一个是“最”的或哪一个是“最少的”

库(dplyr)
图书馆(tidyr)
df2%
聚集(列,值,-组,na.rm=TRUE)%>%
计数(组、值)%>%
排列(组,描述(n))%>%
分组依据(分组)%>%
切片(c(1,n())%>%
变异(类型=c(“最”、“最”和“最少”))%>%
选择(-n)%>%
排列(类型、值)%>%
右键联接(df,by=“group”)%>%
选择(c(colnames(df),“most”,“least”))
df2
#一个tibble:8x5
A、B组最差
1黄绿色黄绿色
2 1绿色-黄色-黄色-绿色
3 1黄-黄-绿
4 2蓝-蓝-红
5.2红蓝红
橙紫橙紫
7.3橙橙紫
8.3橙橙紫
两个选项:

  • 重塑为长格式,并使用
    汇总
    (或
    计数
    )进行聚合,将
    which.max
    /
    which.min
    子集:
  • 库(tidyverse)
    df%
    聚集(变量、颜色、A:B)%>%
    下拉菜单(颜色)%>%
    分组依据(组,颜色)%>%
    总结(n=n())%>%
    总结(most=颜色[which.max(n)],
    最小值=颜色[which.min(n)])%>%
    左联合(df,)
    #>加入,由=“集团”
    #>#A tibble:8 x 5
    #>A、B组最差
    #>           
    #>1黄绿色黄绿色
    #>2 1绿色-黄色-黄色-绿色
    #>3 1黄-黄-绿
    #>4 2蓝-蓝-红
    #>5.2红蓝红
    #>橙紫橙紫
    #>7.3橙橙紫
    #>8.3橙橙紫
    
  • 对值表进行排序并将其子集:

    df%>%
    分组依据(分组)%>%
    mutate(most=姓氏(sort(表(c(A,B)'))),
    最小值=第一个(名称(排序)(表(c(A,B);))))
    #>#A tibble:8 x 5
    #>#组:组[3]
    #>A、B组最差
    #>           
    #>1黄绿色黄绿色
    #>2 1绿色-黄色-黄色-绿色
    #>3 1黄-黄-绿
    #>4 2蓝-蓝-红
    #>5.2红蓝红
    #>橙紫橙紫
    #>7.3橙橙紫
    #>8.3橙橙紫
    
  • 两种选择:

  • 重塑为长格式,并使用
    汇总
    (或
    计数
    )进行聚合,将
    which.max
    /
    which.min
    子集:
  • 库(tidyverse)
    df%
    聚集(变量、颜色、A:B)%>%
    下拉菜单(颜色)%>%
    分组依据(组,颜色)%>%
    总结(n=n())%>%
    总结(most=颜色[which.max(n)],
    最小值=颜色[which.min(n)])%>%
    左联合(df,)
    #>加入,由=“集团”
    #>#A tibble:8 x 5
    #>A、B组最差
    #>           
    #>1黄绿色黄绿色
    #>2 1绿色-黄色-黄色-绿色
    #>3 1黄-黄-绿
    #>4 2蓝-蓝-红
    #>5.2红蓝红
    #>橙紫橙紫
    #>7.3橙橙紫
    #>8.3橙橙紫
    
  • 对值表进行排序并将其子集:

    df%>%
    分组依据(分组)%>%
    mutate(most=姓氏(sort(表(c(A,B)'))),
    最小值=第一个(名称(排序)(表(c(A,B);))))
    #>#A tibble:8 x 5
    #>#组:组[3]
    #>A、B组最差
    #>           
    #>1黄绿色黄绿色
    #>2 1绿色-黄色-黄色-绿色
    #>3 1黄-黄-绿
    #>4 2蓝-蓝-红
    #>5.2红蓝红
    #>橙紫橙紫
    #>7.3橙橙紫
    #>8.3橙橙紫
    

  • 这正是我要找的!我一直在为我的原始数据修改它,我可以修改它
      group      A      B
    1     1 yellow  green
    2     1  green yellow
    3     1 yellow   <NA>
    4     2   blue   blue
    5     2   <NA>    red
    6     3 orange purple
    7     3   <NA> orange
    8     3 orange   <NA>
    
      group      A      B   most  least
    1     1 yellow  green yellow  green
    2     1  green yellow yellow  green
    3     1 yellow   <NA> yellow  green
    4     2   blue   blue   blue    red
    5     2   <NA>    red   blue    red
    6     3 orange purple orange purple
    7     3   <NA> orange orange purple
    8     3 orange   <NA> orange purple
    
    library(dplyr)
    library(tidyr)
    
    df2 <- df %>%
      gather(Column, Value, -group, na.rm = TRUE) %>%
      count(group, Value) %>%
      arrange(group, desc(n)) %>%
      group_by(group) %>%
      slice(c(1, n())) %>%
      mutate(Type = c("most", "least")) %>%
      select(-n) %>%
      spread(Type, Value) %>%
      right_join(df, by = "group") %>%
      select(c(colnames(df), "most", "least"))
    df2
    # A tibble: 8 x 5
      group      A      B   most  least
      <dbl>  <chr>  <chr>  <chr>  <chr>
    1     1 yellow  green yellow  green
    2     1  green yellow yellow  green
    3     1 yellow   <NA> yellow  green
    4     2   blue   blue   blue    red
    5     2   <NA>    red   blue    red
    6     3 orange purple orange purple
    7     3   <NA> orange orange purple
    8     3 orange   <NA> orange purple