根据规则将数据框中的值替换为其他值
Posted
技术标签:
【中文标题】根据规则将数据框中的值替换为其他值【英文标题】:Replace values in data frame with other values according to a rule 【发布时间】:2014-01-01 04:32:28 【问题描述】:我是 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”与“巴斯夫股票”。
【问题讨论】:
【参考方案1】:一个不错的函数是来自 plyr 包的 mapvalues()
:
require(plyr)
dataframe$newdate <- mapvalues(dataframe$date,
from=c("19921231","19931231","19941231"),
to=c("1992","1993","1994"))
【讨论】:
这就是我一直在寻找的答案! 为什么这个答案不在顶部【参考方案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')
【讨论】:
【参考方案3】:你可以使用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
【讨论】:
【参考方案4】:当您想从日期中提取年份时,您可以使用以下代码行:
dataframe$year <- substr(dataframe$date,1,4)
当您想同时为新变量分配一个类时:
dataframe$year <- as.integer(substr(dataframe$date,1,4))
【讨论】:
以上是关于根据规则将数据框中的值替换为其他值的主要内容,如果未能解决你的问题,请参考以下文章