R中列的条件重新编码

Conditional recoding of columns in R

我有一个数据集,看起来非常简陋(实际上要大得多)

frequency      unit
   500          3
   2            1
   400          3
   4            1
   15           2

单位列显示频率是按 1=周、2=月还是 3=年测量的。

我想做的是重新编码频率(到同一行甚至新行),这样我就可以将所有频率都放在同一个单位中(例如,将 15 除以 4,将 400 除以 52,这样一切都是以周为单位)。

我实际上尝试了很多东西,例如:

data$frequency[data$unit == 2] <- data$frequency*0,25

但这并不像预期的那样工作...因为它将频率列的第一个数字 (500) 乘以 0,25 并显示它...而不是使用同一行中的数字(15).

frequency         unit
       500          3
       2            1
       400          3
       4            1
       125          2

而不是...

 frequency        unit
       500          3
       2            1
       400          3
       4            1
       3.75         2

我想看什么

有谁知道如何处理这个问题吗?...真的很棒:)

关于@DavidArenburg 和@BondedDust 的评论,这里有两种方法:

data <- read.table(header = TRUE, 
                   stringsAsFactors = FALSE, 
                   sep = ";", 
                   text = "
frequency;unit;unit2
500;3;three
2;1;one
400;3;three
4;1;one
15;2;two")

(data$freqNew <- data$frequency / c("one" = 1, "two" = 4, "three" = 52)[data$unit2])
#        3        1        3        1        2 
# 9.615385 2.000000 7.692308 4.000000 3.750000 

data$frequency / c(1, 4, 52)[data$unit]
# [1] 9.615385 2.000000 7.692308 4.000000 3.750000