gpt4 book ai didi

r - 根据条件更改分组中的值

转载 作者:行者123 更新时间:2023-12-02 02:57:48 27 4
gpt4 key购买 nike

我从以下数据开始:

df <- data.frame(Person=c("Ada","Ada","Bob","Bob","Carl","Carl"), Day=c(1,2,2,1,1,2), Fruit=c("Apple","X","Apple","X","X","Orange"))

Person Day Fruit
1 Ada 1 Apple
2 Ada 2 X
3 Bob 2 Apple
4 Bob 1 X
5 Carl 1 X
6 Carl 2 Orange

我想遍历每个人并替换未知的水果 XAppleOrange同时确保如果它是 Orange有一天,它应该是Apple第二天,反之亦然。

对于艾达:Day 1 = Apple , 意思是 Day 2 = X <- Orange

我不知道从哪里开始,除了:

library(dplyr)
df %>%
group_by(Person)
  • 对方向有什么建议吗?

最佳答案

另一种使用 dplyr 中的 case_when 的解决方案:

library(dplyr)

# Changing datatypes to character instead of factor
df[] <- lapply(df, as.character)

# Optional, but this line will convert all columns to appropriate datatype, eg. Day will be integer
df <- readr::type_convert(df)

df %>%
group_by(Person) %>%
mutate(
Contains_Apple = any(Fruit == "Apple"),
Contains_Orange = any(Fruit == "Orange"),
Fruit = case_when(
Fruit == "X" & Contains_Apple == F ~ "Apple",
Fruit == "X" & Contains_Orange == F ~ "Orange",
TRUE ~ Fruit
)
)

# A tibble: 6 x 5
# Groups: Person [3]
Person Day Fruit Contains_Apple Contains_Orange
<chr> <int> <chr> <lgl> <lgl>
1 Ada 1 Apple T F
2 Ada 2 Orange T F
3 Bob 2 Apple T F
4 Bob 1 Orange T F
5 Carl 1 Apple F T
6 Carl 2 Orange F T

通过以下方式删除 Contains_AppleContains_Orange:

df %>% 
group_by(Person) %>%
mutate(Contains_Apple = any(Fruit == "Apple"),
Contains_Orange = any(Fruit == "Orange"),
Fruit = case_when(Fruit == "X" & Contains_Apple == F ~ "Apple",
Fruit == "X" & Contains_Orange == F ~ "Orange",
TRUE ~ Fruit)) %>%
select(Person, Day, Fruit) %>%
ungroup()

# A tibble: 6 x 3
Person Day Fruit
<chr> <int> <chr>
1 Ada 1 Apple
2 Ada 2 Orange
3 Bob 2 Apple
4 Bob 1 Orange
5 Carl 1 Apple
6 Carl 2 Orange

关于r - 根据条件更改分组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48244022/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com