我是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”与“巴斯夫股票”。
答案 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