如何用R替换数据集中的非数值

时间:2017-01-31 02:48:08

标签: r

我有一个看起来像这样的数据集:

Date          Electricity
janv-90             23
juin-90             24
juil-90             34
janv-91             42
juin-91             27
juil-91             13

但我希望它看起来像那样:

Date          Electricity
190             23
690             24
790             34
191             42
691             27
791             13

请注意,我的数据集从90到10(即1990年到2010年)。

2 个答案:

答案 0 :(得分:0)

我们可以使用matchsubstrpaste来获得预期的输出

df$Date <- as.numeric(paste0(match(substr(df$Date, 1, 4), month.abb), substring(df$Date, 6)))
df
#    Date Electricity
# 1  190          23
# 2  690          24
# 3  790          34
# 4  191          42
# 5  691          27
# 6  791          13

或使用tidyverse分隔&#39;日期&#39;通过-分隔符将列分为两列(&#39;日期&#39;和&#39; val&#39;),然后match&#39;日期&#39;使用mon_ab中的locale(),最后是unite&#39;日期&#39;和&#39; val&#39;列一起

library(dplyr)
library(tidyr)
library(readr)
separate(df, Date, into = c("Date", "val")) %>%
       mutate(Date = match(Date, sub("\\.$", "", locale("fr")[[1]]$mon_ab))) %>% 
       unite(Date, Date, val, sep="")
#  Date Electricity
#1  190          23
#2  690          24
#3  790          34
#4  191          42
#5  691          27
#6  791          13

数据

df <- structure(list(Date = c("janv-90", "juin-90", "juil-90", "janv-91", 
"juin-91", "juil-91"), Electricity = c(23L, 24L, 34L, 42L, 27L, 
 13L)), .Names = c("Date", "Electricity"), class = "data.frame", row.names = c(NA, 
-6L))

答案 1 :(得分:0)

因为你的monts是法语,找到了一条很长的路线,否则我们已经将月份名称作为R中的常量,如month.abbmonth.names

# first I create a look-up vector
month.abb.french <- c("janv", "fevr", "mars", "avril",
                      "mai", "juin", "juil", "aout", "sept",
                      "oct", "nov", "dec")

# extract the months
month <- unlist(strsplit(df$Date, "-"))[c(TRUE, FALSE)]
# similarily extract the years
year <- unlist(strsplit(df$Date, "-"))[c(FALSE, TRUE)]
# month
#[1] "janv" "juin" "juil" "janv" "juin" "juil"
# year
#[1] "90" "90" "90" "91" "91" "91"

df$newcol <- paste0(match(month, month.abb.french), year)
#      Date Electricity newcol
#1: janv-90          23    190
#2: juin-90          24    690
#3: juil-90          34    790
#4: janv-91          42    191
#5: juin-91          27    691
#6: juil-91          13    791