我正在创建三个新列,并尝试根据另外两列中的值填充它们。新列为"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))