提问人:Crippycajes 提问时间:7/6/2023 最后编辑:PhilCrippycajes 更新时间:7/6/2023 访问量:41
引用多列和多行以计算新列中的新值
Referencing multiple columns and rows to calculate new value in a new column
问:
这是我的 data.frame {sf}。我将其转换为长格式,因此 UID 表示多边形。在每个 UID 中,存在 0 到 3 个物种。每个 UID 的总和百分比将为 100 或 0。
用户界面 | 次序 | 物种 | 百分之 | 几何学 |
---|---|---|---|---|
1 | 1 | 一个 | 80 | 等等 |
1 | 2 | BL系列 | 15 | 等等 |
1 | 3 | P | 5 | 等等 |
2 | 1 | S | 75 | 等等 |
2 | 2 | E | 25 | 等等 |
2 | 3 | 那 | 0 | 等等 |
3 | 1 | PA系列 | 61 | 等等 |
3 | 2 | 在 | 39 | 等等 |
3 | 3 | 那 | 0 | 等等 |
4 | 1 | 那 | 0 | 等等 |
4 | 2 | 那 | 0 | 等等 |
4 | 3 | 那 | 0 | 等等 |
我想在新列“ZONE”中创建一个新条目,其中包含以下值:
- 如果每个唯一的 UID 不包含物种的 A 或 AT,则在 ZONE 中输入“Misc.”。
- 如果唯一 UID 的所有物种值均为 na,则在 Zone 中输入 na。
- 如果 UID 包含 A 或 AT,并且 A 或 AT 的下一个单元格中的百分比为 >= 80,则输入“For”。如果 <80 输入“Gra”
这是我的尝试:
list < - c("A", "AT")
data.frame$ZONE <- (data.frame$SPECIES %in% list)
data.frame$ZONE[data.frame$ZONE == TRUE] <- "For"
data.frame$ZONE[is.na(data.frame$SPECIES)] <- NA
data.frame$ZONE[data.frame$ZONE == FALSE] <- "Misc."
这导致每一行都被视为一个个体,而不是按宫内节育器分组。另外,我完全忽略了>=80或<。
我希望它看起来像这样:
用户界面 | 次序 | 物种 | 百分之 | 区 | 几何学 |
---|---|---|---|---|---|
1 | 1 | 一个 | 80 | 为 | 等等 |
1 | 2 | BL系列 | 15 | 为 | 等等 |
1 | 3 | P | 5 | 为 | 等等 |
2 | 1 | S | 75 | 杂项。 | 等等 |
2 | 2 | E | 25 | 杂项。 | 等等 |
2 | 3 | 那 | 0 | 杂项。 | 等等 |
3 | 1 | PA系列 | 61 | 格拉 | 等等 |
3 | 2 | 在 | 39 | 格拉 | 等等 |
3 | 3 | 那 | 0 | 格拉 | 等等 |
4 | 1 | 那 | 0 | 那 | 等等 |
4 | 2 | 那 | 0 | 那 | 等等 |
4 | 3 | 那 | 0 | 那 | 等等 |
感谢您的帮助。
答:
1赞
jkatam
7/6/2023
#1
请尝试以下代码
sf %>% group_by(UID) %>%
mutate(zone1=ifelse(any(SPECIES %in% c('A','AT')), 'Misc.', NA),
zone2=ifelse(all(SPECIES %in% c('na')), 'na', NA),
zone3=ifelse(any(SPECIES %in% c('A','AT') & PERCENT>=80), 'For',NA),
zone4=ifelse(any(SPECIES %in% c('A','AT') & PERCENT<80), 'Gra',NA),
zone=ifelse(is.na(coalesce(zone3,zone4,zone2,zone1)),'Misc.',coalesce(zone3,zone4,zone2,zone1))) %>%
select(-c(zone1:zone4))
创建于 2023-07-05 使用 reprex v2.0.2
# A tibble: 12 × 6
# Groups: UID [4]
UID ORDER SPECIES PERCENT geometry zone
<dbl> <dbl> <chr> <dbl> <chr> <chr>
1 1 1 A 80 blahblah For
2 1 2 BL 15 blahblah For
3 1 3 P 5 blahblah For
4 2 1 S 75 blahblah Misc.
5 2 2 E 25 blahblah Misc.
6 2 3 na 0 blahblah Misc.
7 3 1 PA 61 blahblah Gra
8 3 2 AT 39 blahblah Gra
9 3 3 na 0 blahblah Gra
10 4 1 na 0 blahblah na
11 4 2 na 0 blahblah na
12 4 3 na 0 blahblah na
评论
1赞
Crippycajes
7/6/2023
谢谢,对于更大、更复杂的数据集来说,这确实是很好的指导
0赞
jkatam
7/6/2023
谢谢,你能把它当作一个答案吗
评论