R中列的条件重新编码

时间:2015-01-08 18:22:26

标签: 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

我希望看到的内容。

有没有人知道如何处理这个问题?...真的很棒:)。

1 个答案:

答案 0 :(得分: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