根据另一列中的值添加新列

时间:2021-05-10 19:57:30

标签: r

我正在使用 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))

感谢您的帮助。

4 个答案:

答案 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))
相关问题