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

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))

【讨论】:

以上是关于根据规则将数据框中的值替换为其他值的主要内容,如果未能解决你的问题,请参考以下文章

如何将逗号添加到数据框中的现有值中?熊猫

根据c =字符数替换列中的值

如何用同一数据框中其他列的实际列值替换一列中的字符串值?

如果另一个Dataframe值小于0,则替换R数据框中的值

将 2 列中的值合并为 pandas 数据框中的单列

将比例 z 检验应用于数据框中的每条记录