получить все строки, которые имеют определенный год - PullRequest
0 голосов
/ 13 апреля 2019

У меня есть эта матрица, в которой указаны имя человека, дата рождения и его пол:

Name     Date          Sex
A       2017-08-01      M
B       2018-06-02      F
C       2019-06-03      F

Что я хочу сделать в R, так это узнать количество людей с именем A, которые родились в 2017 году, но я не знаю, как.

Вот мой код, который дает нам людей с именем A:

df[format(as.Date(matrix$Date),'%Y')=='2017' & matrix$Name=='A', ]

Ответы [ 2 ]

1 голос
/ 13 апреля 2019

Как уже упоминал Ронак, возможно, попробуйте использовать фреймы данных, когда вы используете гетерогенные данные - матрицы допускают только один тип данных!Вероятно, вы можете привести данные к фрейму данных, используя as.data.frame().

Если вы хотите указать количество человек для каждой комбинации имя-год, вы можете попробовать использовать следующее «аккуратное» решение:

library(lubridate)
library(dplyr)

sample_data <- data.frame(Name = c("A", "B", "C"), 
                          Date = c("2017-08-01", "2018-06-02", "2019-06-03"), 
                          Sex = c("M", "F", "F"))

sample_data %>% mutate(Year = year(Date)) %>% count(Name, Year)

# A tibble: 3 x 3
  Name   Year     n
  <fct> <dbl> <int>
1 A      2017     1
2 B      2018     1
3 C      2019     1
0 голосов
/ 13 апреля 2019

Если у вас есть матрица, преобразуйте ее в датафрейм, поскольку с ними легко иметь дело.

Затем нам нужно получить год от Date. Используя базу R вы можете сделать

df[with(df, format(as.Date(Date), "%Y") == "2017" & Name == "A"), ]

# Name        Date Sex
#1    A 2017-08-01   M

Или используя пакеты

library(dplyr)
library(lubridate)

df %>% filter(year(Date) == 2017 & Name == "A")

данные

df <- structure(list(Name = structure(1:3, .Label = c("A", "B", "C"
), class = "factor"), Date = structure(1:3, .Label = c("2017-08-01", 
"2018-06-02", "2019-06-03"), class = "factor"), Sex = structure(c(2L, 
1L, 1L), .Label = c("F", "M"), class = "factor")), class = 
"data.frame", row.names = c(NA, 
-3L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...