R 使用 ifelse() 条件改变多列

标签 r

我想用 ifelse() 条件创建几个列。这是我的示例代码:

df <- tibble( 
date = lubridate::today() +0:9,
return= c(1,2.5,2,3,5,6.5,1,9,3,2))
现在我想添加具有升序条件的新列(从 1 到 8)。第一列应该只包含来自“return”列的大于 1 的值,第二列应该只包含大于 2 的值,依此类推...
我可以使用 mutate() 函数计算每一列:
df <- df %>% mutate( `return>1`= ifelse(return > 1, return, NA))
df <- df %>% mutate( `return>2`= ifelse(return > 2, return, NA))
df <- df %>% mutate( `return>3`= ifelse(return > 3, return, NA))
df <- df %>% mutate( `return>4`= ifelse(return > 4, return, NA))
df <- df %>% mutate( `return>5`= ifelse(return > 5, return, NA))
df <- df %>% mutate( `return>6`= ifelse(return > 6, return, NA))
df <- df %>% mutate( `return>7`= ifelse(return > 7, return, NA))
df <- df %>% mutate( `return>8`= ifelse(return > 8, return, NA))


> head(df)
# A tibble: 6 x 10
date       return `return>1` `return>2` `return>3` `return>4` `return>5` `return>6` `return>7` `return>8`
<date>      <dbl>      <dbl>      <dbl>      <dbl>      <dbl>      <dbl>      <dbl>      <dbl>      <dbl>
1 2019-03-08    1         NA         NA         NA         NA         NA         NA           NA         NA
2 2019-03-09    2.5        2.5        2.5       NA         NA         NA         NA           NA         NA
3 2019-03-10    2          2         NA         NA         NA         NA         NA           NA         NA
4 2019-03-11    3          3          3         NA         NA         NA         NA           NA         NA
5 2019-03-12    5          5          5          5          5         NA         NA           NA         NA
6 2019-03-13    6.5        6.5        6.5        6.5        6.5        6.5        6.5         NA         NA
有没有更简单的方法来创建所有这些列并减少所有这些代码?也许使用 map_function?有没有办法自动命名新列?

最佳答案

带有 lapply 的选项

n <- seq(1, 8)
df[paste0("return > ", n)] <- lapply(n, function(x) 
                    replace(df$return, df$return <= x, NA))


#       date       return `return > 1` `return > 2` `return > 3` .....
#  <date>      <dbl>        <dbl>        <dbl>        <dbl> 
#1 2019-03-08    1           NA           NA           NA  
#2 2019-03-09    2.5          2.5          2.5         NA    
#3 2019-03-10    2            2           NA           NA    
#4 2019-03-11    3            3            3           NA    
#5 2019-03-12    5            5            5            5    
#6 2019-03-13    6.5          6.5          6.5          6.5  
#...

关于R 使用 ifelse() 条件改变多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55059761/

相关文章:

r - 如何用R计算分类的精度、召回率和准确率?

linux - readPicture 函数(grImport 包)在 Linux 上不起作用 (F22)

r - 来自 H2O Mojo/Pojo 的分类 TreeMap

r - 推广任意大小矩阵的函数

r - 使用 ggplot 和 coord_polar 绘制螺旋条形图 (Condegram)

r - 由于@example,Check()-ing 包失败

r - R 中两个数据集之间的近似字符串匹配

r - 使用ggplot2隐藏比例时如何保持绘图大小?

r - 在复制其他列的同时将一个字符串拆分为 R 中的两行或更多行

r - r 中带有 coplot 的特定部分