英文:
group two columns and count in R
问题
我正在尝试使用数据框来进行简单的计数。例如,如果数据框如下所示:
> df
                             ID   lable     col1    col2 
												    
 1              Buckinghamshire       1        A       A      
 2 Cornwall and Isles of Scilly       2        B       B      
 3                        Devon       1        A       A      
 4                  Dunfermline       2        C       C      
 5                   Humberside       2        C       C      
 6                 Inner London       X        A       A      
 7                         Kent       X        A       A      
 8                    Kirkcaldy       1        C       C      
 9                   Lancashire       1        B       B      
10            Not known/missing       2        C       C      
期望的输出如下:
> df2
     name    group        1        2      X
1    col1        A     4647     4858    108
1    col1        B   120456   146864   3502       
1    col1        C      258       53    111
2    col2        A    12247     1202     66
2    col2        B     4585      258      1
2    col2        C    32158    15426    477
我该如何解决这个问题以获得期望的输出?
英文:
I am trying to do a simple counts with dataframe
For example, if the df is as below:
> df
                             ID   lable     col1    col2 
												    
 1              Buckinghamshire       1        A       A      
 2 Cornwall and Isles of Scilly       2        B       B      
 3                        Devon       1        A       A      
 4                  Dunfermline       2        C       C      
 5                   Humberside       2        C       C      
 6                 Inner London       X        A       A      
 7                         Kent       X        A       A      
 8                    Kirkcaldy       1        C       C      
 9                   Lancashire       1        B       B      
10            Not known/missing       2        C       C      
Desire output
> df2
     name    group        1        2      X
1    col1        A     4647     4858    108
1    col1        B   120456   146864   3502       
1    col1        C      258       53    111
2    col2        A    12247     1202     66
2    col2        B     4585      258      1
2    col2        C    32158    15426    477
How can I solve this so I can get desire output
答案1
得分: 0
这是您提供的代码的翻译:
问题不清晰。
lines="
ID, 标签, 列1, 列2
                  白金汉郡   ,    1    ,A,A      
     康沃尔和西西里群岛   ,    2    ,B,B      
                            德文   ,    1    ,A,A      
                      邓弗姆林   ,    2    ,C,C      
                       亨伯赛德    ,   2    ,C,C"
con <- textConnection(lines)
data <- read.csv(con)
data$col2=trimws(data$col2)
library(tidyr)
library(dplyr)
temp=gather(data, key="name", value="group",3:4)
temp2=temp[,c(2,3,4)] %>%
  group_by(name, group, label) %>%  summarise(count=n())
spread(temp2, key="label", value="count")
结果:
      名称  组别   `1`   `2`
      <chr> <chr> <int> <int>
    1 列1  A         2    NA
    2 列1  B        NA     1
    3 列1  C        NA     2
    4 列2  A         2    NA
    5 列2  B        NA     1
    6 列2  C        NA     2
英文:
The question is not clear.
lines="
ID, label, col1, col2
              Buckinghamshire   ,    1    ,A,A      
 Cornwall and Isles of Scilly   ,    2    ,B,B      
                        Devon   ,    1    ,A,A      
                  Dunfermline   ,    2    ,C,C      
                   Humberside    ,   2    ,C,C"
con <- textConnection(lines)
data <- read.csv(con)
data$col2=trimws(data$col2)
library(tidyr)
library(dplyr)
temp=gather(data, key="name", value="group",3:4)
temp2=temp[,c(2,3,4)] %>%
  group_by(name, group, label) %>%  summarise(count=n())
spread(temp2, key="label", value="count")
Result:
  name  group   `1`   `2`
  <chr> <chr> <int> <int>
1 col1  A         2    NA
2 col1  B        NA     1
3 col1  C        NA     2
4 col2  A         2    NA
5 col2  B        NA     1
6 col2  C        NA     2
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论