条件功能

时间:2012-02-15 17:11:33

标签: r

我想将数据框的一列转换为另一列。

我有一个名为“每月日期”的列,例如,值可以是7,15或27。我希望将这几天转换为它们所对应的那一周。

准确地说,

  • 天< 7从第1周开始,

  • 天> = 7& < 14从第2周开始,

  • 天> = 14& < 21从第3周开始,

  • 天> = 21& < 31从第4周开始。

我想在我的数据框中添加一个新列,该列提供采样样本的周数。

示例:

dayofthemonth, sample, week
5, 0.35,  1
14, 0.5, 3
27, 0.74, 4
[...]

我尝试了“if”函数,但是当条件应用于向量而不是单个值时,它似乎不起作用。

3 个答案:

答案 0 :(得分:3)

假设您的数据框为df。你可以用

df$week <- floor(df$dayofthemonth/7) + 1

在此之后,为了完整性,这是另一种满足最后条件的方法(没有ifelse):

df$week[ which(df$week) > 4 ] <- 4

答案 1 :(得分:1)

如果您的数据框名为d

d$week = floor(d$dayofthemonth / 7) + 1

答案 2 :(得分:0)

其他人已经展示了一种使用floor获得所需结果的方法,但更具体的问题是,if程序流仅适用于单个逻辑值,旨在选择要运行的代码块。 ifelse函数将采用逻辑值向量和2个其他向量(一个用于TRUE,为FALSE)并基于逻辑向量交织2个向量,因此使用ifelse的一个选项可用于您的问题是:

d$week <- ifelse( d$dayofthemonth < 7, 1, 
  ifelse( d$dayofthemonth < 14, 2, 
    ifelse( d$dayofthemonth < 21, 3, 4 ) ) )

另请查看findInterval函数,了解另一种可能比ifelse更简单的方法,但也允许具有不同宽度的区间。