считая количество раз, когда значение появляется в столбце по отношению к другим столбцам в r - PullRequest
0 голосов
/ 01 июля 2018

Я новичок в r, и у меня есть данные, очень близкие к приведенному ниже, и я хотел бы найти общий способ, который говорит мне, сколько раз плюс 1, число «0» появляется для каждой страны (intro4) и Я бы.

        Intro4    number  id
  221    TAN           0  19
  222    TAN           0  73
  223    TAN           0  73
  224    TOG           0  37
  225    TOG           0  58
  226    UGA           0  96
  227    UGA           0 112
  228    UGA           0  96
  229    ZAM           0  40
  230    ZAM           0  99
  231    ZAM           0 139

Я могу сделать это вручную, так как это большой фрейм данных, который будет длиться вечно, count () дает мне частоту, но не делит ее между разными странами. Я нашел способ сделать это, но мне придется выбирать и фильтровать для каждого отдельного округа (intro4) и добавить 1 к результату. Мне было интересно, есть ли более быстрый способ это сделать. Код, который я пробовал, был таким:

projects <- finalr %>% select (Intro4,number,id)

projects1<-projects %>%  filter (str_detect (number, "0"))

projects2<-projects1 %>%arrange (Intro4)

projects3<-sum(projects2$Intro4 == "TAN", na.rm = TRUE)

projects4<-sum(projects2$Intro4=="UGA",na.rm=TRUE)

Буду очень признателен за любую помощь, спасибо:)

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Вы также можете сделать это следующим образом:

library(dplyr)
dat <- read.table(header = T, text = 
                    "Intro4    number  id

                      TAN           0  19
                      TAN           0  73
                      TAN           0  73
                      TOG           0  37
                      TOG           0  58
                      UGA           0  96
                      UGA           0 112
                      UGA           0  96
                      ZAM           0  40
                      ZAM           0  99
                      ZAM           0 139", stringsAsFactors = F)
dat %>% group_by(Intro4, id, number) %>% tally()

Который производит:

  Intro4    id number     n
  <chr>  <int>  <int> <int>
1 TAN       19      0     1
2 TAN       73      0     2
3 TOG       37      0     1
4 TOG       58      0     1
5 UGA       96      0     2
6 UGA      112      0     1
7 ZAM       40      0     1
8 ZAM       99      0     1
9 ZAM      139      0     1
0 голосов
/ 01 июля 2018

Предполагая, что number может быть чем-то вроде 0, 1, 2 и т. Д., Можно посчитать вхождение 0 на sum(number==0). Решение с использованием dplyr может иметь вид:

library(dplyr)

df %>% group_by(Intro4, id) %>%
  summarise(count = sum(number==0))

# # A tibble: 9 x 3
# # Groups: Intro4 [?]
#   Intro4    id count
#   <chr>  <int> <int>
# 1 TAN       19     1
# 2 TAN       73     2
# 3 TOG       37     1
# 4 TOG       58     1
# 5 UGA       96     2
# 6 UGA      112     1
# 7 ZAM       40     1
# 8 ZAM       99     1
# 9 ZAM      139     1

Данные:

df <- read.table(text="
Intro4    number  id
221    TAN           0  19
222    TAN           0  73
223    TAN           0  73
224    TOG           0  37
225    TOG           0  58
226    UGA           0  96
227    UGA           0 112
228    UGA           0  96
229    ZAM           0  40
230    ZAM           0  99
231    ZAM           0 139",
header = TRUE, stringsAsFactors = FALSE)
...