我有一个矩阵,其中包含一个人的名字,出生日期和各自的性别:
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
答案 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))