Изменение значений столбца в R - PullRequest
1 голос
/ 03 марта 2020

У меня есть следующий набор данных, который я хочу очистить:

              Provice      Lat     Long Date Recovered
Anhui.1         Anhui  31.8257 117.2264    1         0
Chongqing.1 Chongqing  30.0572 107.8740    1         0
Guangdong.1 Guangdong  23.3417 113.4244    1         0
Henan.1         Henan 33.88202 113.6140    1         0
Hubei.1         Hubei  30.9756 112.2707    1        28
Hunan.1         Hunan  27.6104 111.7088    1         0
Jiangsu.1     Jiangsu  32.9711 119.4550    1         0
Jiangxi.1     Jiangxi   27.614 115.7221    1         0
Shandong.1   Shandong  36.3427 118.1498    1         0
Zhejiang.1   Zhejiang  29.1832 120.0934    1         0
Anhui.2         Anhui  31.8257 117.2264    2         0
Chongqing.2 Chongqing  30.0572 107.8740    2         0
Guangdong.2 Guangdong  23.3417 113.4244    2         2
Henan.2         Henan 33.88202 113.6140    2         0
Hubei.2         Hubei  30.9756 112.2707    2        28
Hunan.2         Hunan  27.6104 111.7088    2         0
Jiangsu.2     Jiangsu  32.9711 119.4550    2         0
Jiangxi.2     Jiangxi   27.614 115.7221    2         0
Shandong.2   Shandong  36.3427 118.1498    2         0
Zhejiang.2   Zhejiang  29.1832 120.0934    2         0

Что я хочу сделать, это изменить столбец Provice таким образом, чтобы вместо чтения «Anhui.1 Anhui» он просто читал « Anhui "(и аналогично для остальных значений в Provice. Кроме того, я хотел бы связать фактическую дату для каждого значения в столбце Date. Например, если в поле Date есть значение 1, тогда я хотел бы, чтобы оно читалось 20 -01-22 и если в поле Дата указано значение 2, прочитайте 20-01-23.

По сути, я бы хотел, чтобы мой набор данных выглядел следующим образом:

  Provice      Lat     Long      Date   Recovered
Anhui      31.8257 117.2264    20-01-22         0
Chongqing  30.0572 107.8740    20-01-22         0
Guangdong  23.3417 113.4244    20-01-22         0
Henan     33.88202 113.6140    20-01-22         0
Hubei      30.9756 112.2707    20-01-22        28
Hunan      27.6104 111.7088    20-01-22         0
Jiangsu    32.9711 119.4550    20-01-22         0
Jiangxi     27.614 115.7221    20-01-22         0
Shandong   36.3427 118.1498    20-01-22         0
Zhejiang   29.1832 120.0934    20-01-22         0
Anhui      31.8257 117.2264    20-01-23         0
Chongqing  30.0572 107.8740    20-01-23         0
Guangdong  23.3417 113.4244    20-01-23         2
Henan     33.88202 113.6140    20-01-23         0
Hubei      30.9756 112.2707    20-01-23        28
Hunan      27.6104 111.7088    20-01-23         0
Jiangsu    32.9711 119.4550    20-01-23         0
Jiangxi     27.614 115.7221    20-01-23         0
Shandong   36.3427 118.1498    20-01-23         0
Zhejiang   29.1832 120.0934    20-01-23         0

Может кто-то пожалуйста, помогите мне?

Ответы [ 5 ]

1 голос
/ 04 марта 2020

Вы можете попробовать код ниже

df <- `rownames<-`(within(df,Date <- format(as.Date("20-01-22","%y-%m-%d")+Date,"%y-%m-%d")),NULL)

так, чтобы

> df
     Provice      Lat     Long     Date Recovered
1      Anhui 31.82570 117.2264 20-01-22         0
2  Chongqing 30.05720 107.8740 20-01-22         0
3  Guangdong 23.34170 113.4244 20-01-22         0
4      Henan 33.88202 113.6140 20-01-22         0
5      Hubei 30.97560 112.2707 20-01-22        28
6      Hunan 27.61040 111.7088 20-01-22         0
7    Jiangsu 32.97110 119.4550 20-01-22         0
8    Jiangxi 27.61400 115.7221 20-01-22         0
9   Shandong 36.34270 118.1498 20-01-22         0
10  Zhejiang 29.18320 120.0934 20-01-22         0
11     Anhui 31.82570 117.2264 20-01-23         0
12 Chongqing 30.05720 107.8740 20-01-23         0
13 Guangdong 23.34170 113.4244 20-01-23         2
14     Henan 33.88202 113.6140 20-01-23         0
15     Hubei 30.97560 112.2707 20-01-23        28
16     Hunan 27.61040 111.7088 20-01-23         0
17   Jiangsu 32.97110 119.4550 20-01-23         0
18   Jiangxi 27.61400 115.7221 20-01-23         0
19  Shandong 36.34270 118.1498 20-01-23         0
20  Zhejiang 29.18320 120.0934 20-01-23         0

ДАННЫЕ

df <- structure(list(Provice = c("Anhui", "Chongqing", "Guangdong", 
"Henan", "Hubei", "Hunan", "Jiangsu", "Jiangxi", "Shandong", 
"Zhejiang", "Anhui", "Chongqing", "Guangdong", "Henan", "Hubei", 
"Hunan", "Jiangsu", "Jiangxi", "Shandong", "Zhejiang"), Lat = c(31.8257, 
30.0572, 23.3417, 33.88202, 30.9756, 27.6104, 32.9711, 27.614, 
36.3427, 29.1832, 31.8257, 30.0572, 23.3417, 33.88202, 30.9756, 
27.6104, 32.9711, 27.614, 36.3427, 29.1832), Long = c(117.2264, 
107.874, 113.4244, 113.614, 112.2707, 111.7088, 119.455, 115.7221, 
118.1498, 120.0934, 117.2264, 107.874, 113.4244, 113.614, 112.2707, 
111.7088, 119.455, 115.7221, 118.1498, 120.0934), Date = c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L), Recovered = c(0L, 0L, 0L, 0L, 28L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 2L, 0L, 28L, 0L, 0L, 0L, 0L, 0L)), class = "data.frame", row.names = c("Anhui.1", 
"Chongqing.1", "Guangdong.1", "Henan.1", "Hubei.1", "Hunan.1", 
"Jiangsu.1", "Jiangxi.1", "Shandong.1", "Zhejiang.1", "Anhui.2", 
"Chongqing.2", "Guangdong.2", "Henan.2", "Hubei.2", "Hunan.2", 
"Jiangsu.2", "Jiangxi.2", "Shandong.2", "Zhejiang.2"))
1 голос
/ 03 марта 2020

Если вы просто хотите удалить первый компонент имени, используйте sub:

Provice <- c("Anhui.1         Anhui", "Chongqing.1 Chongqing", "Guangdong.1 Guangdong")
out <- sub("^\\S+\\s+", "", Provice)
out

[1] "Anhui"     "Chongqing" "Guangdong"

Шаблон регулярного выражения ^\S+s+ будет соответствовать первому члену вместе со следующим пробелом, который затем удаляется замещающей пустой строкой.

0 голосов
/ 04 марта 2020

Это должно дать вам имена

library(DescTools)
a=StrPos(demo$Provice, pattern = "[0-9]")
np=data.frame()
for(i in 1:length(a))
{
  np=rbind(substr(demo$Provice[i],a[i]+1,nchar(demo$Provice[i])),np)
  names(np)="Provice"
  np$Provice=as.character(np$Provice)
}

Это должно изменить вашу дату на ваш запрос. Предполагая, что у вас есть только эти две даты. Затем вы можете отформатировать, используя as.Date.

df$date=ifelse(date==1,"20-01-22","20-01-23")
0 голосов
/ 03 марта 2020

Дата <-make_date (2020,01,22) + дни (Дата) </p>

Предполагается, что ваша начальная дата 22 января. Для работы этого кода необходимо установить библиотеку lubridate.

0 голосов
/ 03 марта 2020

Область <- stringi :: stri_replace (Область, регулярное выражение = "\\. \\ s? \\ d \\ D +", "") </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...