我正在使用 R-studio。我想根据另一列名为 period 的值创建一个名为干预的新列。因此,如果 period 小于 0,则返回 0。如果 period > 0,则返回 1、2、3,然后继续。如果 period = 0,则留空。以下是我的数据框:
period<- c(-12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,5, 6, 7, 8, 9, 10, 11)
我想要的输出是:
newdf<-data.frame(period = c(-12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,5, 6, 7, 8, 9, 10, 11),
intervention = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11))
感谢您的帮助。
答案 0 :(得分:1)
我们可以在逻辑向量上使用 cumsum
来创建列,replace
'句点'为 0 到空白 (''
) 的值
library(dplyr)
out <- tibble(period) %>%
mutate(intervention = replace(cumsum(period > 0), period == 0, ''))
答案 1 :(得分:1)
您可以简单地使用 ifelse
并在后面将值 0 更改为 ""
,但是如果您插入一个字符串,您的向量将变成一个字符 1。也许用 ""
改变 NA
会更好。所以你可以将新列用作数字向量
period<- c(-12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,5, 6, 7, 8, 9, 10, 11)
intervention <- ifelse(period<0,0,period)
intervention[period==0] <- ""
#probably better
intervention[period==0] <- NA
答案 2 :(得分:1)
我不确定这是否是您要找的:
library(dplyr)
period %>%
as_tibble() %>%
mutate(intervention = ifelse(value < 0, 0, ifelse(value == 0, "",
value)))
# A tibble: 24 x 2
value intervention
<dbl> <chr>
1 -12 0
2 -11 0
3 -10 0
4 -9 0
5 -8 0
6 -7 0
7 -6 0
8 -5 0
9 -4 0
10 -3 0
# ... with 14 more rows
答案 3 :(得分:0)
newdf<-data.frame(period = c(-12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4,5, 6, 7, 8, 9, 10, 11))
newdf$intervention = ifelse(newdf$period < 0 , 0, ifelse(newdf$period ==0, "",newdf$period))