根据规则将数据框中的值替换为其他值

时间:2013-12-13 11:57:52

标签: r map dataframe

我是R的初学者,并没有找到解决以下问题的方法。任何帮助都会非常感激!

我有一个data.frame,想要用定义的其他值替换列的某些值。

data.frame

date<-c("19921231","19931231","19941231","19941231","19931231","19941231")
variable<-c("a","a","a","b","b","b")
value<-c(1:6)
dataframe <- data.frame(date,variable,value)

尝试解决问题

yearend<-c("19921231","19931231","19941231")
year<-c("1992","1993","1994")
map = setNames(yearend,year)
dataframe[] = map[dataframe]

错误消息

Error in map[dataframe] : invalid subscript type 'list'

问题显然是,它不是一个矩阵。解决这个问题最有效的方法是什么?如果我想要替换“真实”字符,它也应该有用。 “BGSFDS”与“巴斯夫股票”。

4 个答案:

答案 0 :(得分:15)

来自plyr包的一个很好的函数是mapvalues()

require(plyr)
dataframe$newdate <- mapvalues(dataframe$date, 
          from=c("19921231","19931231","19941231"), 
          to=c("1992","1993","1994"))

答案 1 :(得分:2)

merge()也可能有所帮助。

yearend<-c("19921231","19931231","19941231")
year<-c("1992","1993","1994")
map = data.frame(yearend,year)

merge(dataframe,map,by.x='date',by.y='yearend')

答案 2 :(得分:1)

如果要从日期中提取年份,可以使用以下代码行执行此操作:

dataframe$year <- substr(dataframe$date,1,4)

如果要同时为新变量分配一个类:

dataframe$year <- as.integer(substr(dataframe$date,1,4))

答案 3 :(得分:0)

您可以使用match

dataframe <- transform(dataframe, Year = year[match(date, yearend)])

      date variable value Year
1 19921231        a     1 1992
2 19931231        a     2 1993
3 19941231        a     3 1994
4 19941231        b     4 1994
5 19931231        b     5 1993
6 19941231        b     6 1994