更改所选变量中的非字母字母

时间:2017-10-24 22:04:33

标签: r

我有一个带文字的数据框。我想改变所有","到" - "在所有选定变量的观察中,并喜欢根据包含单词date的名称选择变量。

我试图将各种变体的grep()表达式合并到MyFunc中,但是还没有能够让它发挥作用。

谢谢!

起点:

df <- data.frame(dateofbirth=c("25,06,1939","15,04,1941","21,06,1978","06,07,1946","14,07,1935"),recdate=c("26,06,1945","03,04,1964","21,06,1949","15,07,1923","07,12,1945"),b=c("8,ted,st","99,tes,rd","6,ldk,dr","2,sdd,jun","asd,2,st"),disdatenow=c("25,06,1975","25,05,1996","21,06,1932","26,07,1934","07,07,1965"), stringsAsFactors = FALSE)

期望的结果:

df <- data.frame(dateofbirth=c("25-06-1939","15-04-1941","21-06-1978","06-07-1946","14-07-1935"),recdate=c("26-06-1945","03-04-1964","21-06-1949","15-07-1923","07-12-1945"),b=c("8,ted,st","99,tes,rd","6,ldk,dr","2,sdd,jun","asd,2"),disdatenow=c("25-06-1975","25-05-1996","21-06-1932","26-07-1934","07-07-1965"), stringsAsFactors = FALSE)

当前代码:

MyFunc <- function(x) {gsub(",","-",df$x)}

2 个答案:

答案 0 :(得分:1)

您可以使用mutate_at中的dplyr

df %>% 
  mutate_at(vars(contains("date")), function(x){gsub(",", "-", x)})

这给你这个:

  dateofbirth    recdate         b disdatenow
1  25-06-1939 26-06-1945  8,ted,st 25-06-1975
2  15-04-1941 03-04-1964 99,tes,rd 25-05-1996
3  21-06-1978 21-06-1949  6,ldk,dr 21-06-1932
4  06-07-1946 15-07-1923 2,sdd,jun 26-07-1934
5  14-07-1935 07-12-1945  asd,2,st 07-07-1965

答案 1 :(得分:0)

使用您的函数MyFunc,这也应该有效

MyFunc <- function(x) {gsub(",", "-", x)}
library(data.table)
setDT(df)
cols <- c("dateofbirth", "recdate", "disdatenow")
df[, cols] <- df[, lapply(.SD, MyFunc), .SDcols = cols]