我想将数据框的一列转换为另一列。
我有一个名为“每月日期”的列,例如,值可以是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”函数,但是当条件应用于向量而不是单个值时,它似乎不起作用。
答案 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
更简单的方法,但也允许具有不同宽度的区间。