基于另一列替换/添加列值

  • 本文关键字:添加 替换 于另一 r
  • 更新时间 :
  • 英文 :


我正在创建三个新列,并尝试根据另外两列中的值填充它们。新列为"0-5"、"5-15"和"15-30"。首先,我想知道根据列的上下列,单元格是否在这些范围内,所以我创建了规则来用"y"填充它们(表示是(。现在,如果存在 y,我想用值列中的相应数字替换该 y。我被困在这一部分。我还想知道是否有更简单的方法可以直接根据上/下列的"值"中的数字填写"0-5"、"5-15"和"15-30"列,而无需先输入"y"。

x               y        upper    lower   0-5  5-15  15-30   value 
378828.1    1682697.2       2       12     y     y    NA      4.04 
378828.1    1682697.2      12       37     NA    y     y      1.00
381625.6    1684852.5       0       63     y     y     y      1.96
388660.2    1704566.9       5       18     NA    y     y      2.65

我们可以使用dplyr包和match函数来实现这一点:

library(dplyr)
dat %>%
rowwise() %>%
mutate(`0-5` = ifelse(any(match(lower:upper, 0:4)), value, NA),
`5-15` = ifelse(any(match(lower:upper, 5:14)), value, NA),
`15-30` = ifelse(any(match(lower:upper, 15:29)), value, NA))
x       y upper lower value `0-5` `5-15` `15-30`
<dbl>   <dbl> <int> <int> <dbl> <dbl>  <dbl>   <dbl>
1 378828.1 1682697     2    12  4.04  4.04   4.04      NA
2 378828.1 1682697    12    37  1.00    NA   1.00    1.00
3 381625.6 1684853     0    63  1.96  1.96   1.96    1.96
4 388660.2 1704567     5    18  2.65    NA   2.65    2.65

数据

dat <- structure(list(x = c(378828.1, 378828.1, 381625.6, 388660.2), 
y = c(1682697.2, 1682697.2, 1684852.5, 1704566.9), upper = c(2L, 
12L, 0L, 5L), lower = c(12L, 37L, 63L, 18L), value = c(4.04, 
1, 1.96, 2.65)), .Names = c("x", "y", "upper", "lower", "value"
), class = "data.frame", row.names = c(NA, -4L))

最新更新