获取具有特定年份的所有行

时间:2019-04-13 09:17:45

标签: r

我有一个矩阵,其中包含一个人的名字,出生日期和各自的性别:

C:
│
└─test
    ├─AAAA
    │      XXXX.rar
    │      XXXX.jpg
    │
    ├─BBBB
    │      XXXX.zip
    │      XXXX.jpg
    │
    ├─CCCC(error_file)
    │      XXXX.rar
    │      XXXX.jpg
    │
    ├─DDDD
    │      XXXX.part1.rar
    │      XXXX.part2.rar
    │      XXXX.jpg
    │
    └─EEEE
           XXXX.jpg

我想在R中做的工作是获得2017年出生的名字为A的人数,但我不知道怎么做。

到目前为止,这是我的代码,这给我们起了名字A的人:

C:
│
└─test
    ├─done
    │  │
    │  │
    │  ├─AAAA
    │  │      XXXX.doc
    │  │      XXXX.jpg
    │  │
    │  ├─BBBB
    │  │      XXXX.doc
    │  │      XXXX.jpg
    │  │
    │  └─DDDD
    │         XXXX.doc
    │         XXXX.jpg
    │
    ├─CCCC(error_file)
    │      XXXX.rar
    │      XXXX.jpg
    │
    └─EEEE
           XXXX.jpg


2 个答案:

答案 0 :(得分:1)

正如Ronak提到的那样,也许在使用异构数据时尝试使用数据帧-矩阵仅允许一种数据类型!您可能可以使用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

答案 1 :(得分:0)

如果您有矩阵,请将其转换为数据帧,因为它很容易处理。

然后我们需要从Date获取年份。使用base 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))