gpt4 book ai didi

R - 跨两组列搜索两个条件

转载 作者:行者123 更新时间:2023-12-02 01:49:58 24 4
gpt4 key购买 nike

我有一个名为fruits的数据框,其中每行最多有3个水果及其相应的颜色。 Color1 与 Fruit1 搭配,Color2 与 Fruit2 搭配,Color3 与 Fruit3 搭配。

  Color1 Color2 Color3 Fruit1 Fruit2 Fruit3
1 red green green apple mango kiwi
2 yellow green red banana plum mango
3 green red grape apple
4 yellow apple

使用 dplyr,我可以返回包含苹果的行(1、3 和 4)。我可以返回红色的行(1、2 和 3)。

red <- filter_at(fruits, vars(Color1:Color3), any_vars(. == "red"))
apple <- filter_at(fruits, vars(Fruit1:Fruit3), any_vars(. == "apple"))

但是如何仅返回红苹果,即仅返回第一行(Color1 = 红色,Fruit1 = 苹果)和第三行(Color2 = 红色,Fruit2 = 苹果)?

谢谢。

附:这是表格的代码

Color1 <- c("red", "yellow", "green", "yellow")
Color2 <- c("green", "green", "red", "")
Color3 <- c("green", "red", "", "")
Fruit1 <- c("apple", "banana", "grape", "apple")
Fruit2 <- c("mango", "plum", "apple", "")
Fruit3 <- c("kiwi", "mango", "", "")

fruits <- data.frame (Color1, Color2, Color3, Fruit1, Fruit2, Fruit3)

最佳答案

您可以独立处理列集,创建逻辑矩阵,然后使用 & 将它们逻辑组合。

前面:

  • 如果您的数据中有 NA 值,则需要一些 mod 才能正常工作;
  • 这假定所有列的顺序相同;例如,如果您的列的顺序为“Color1、Color2、Color3”和“Fruit3、Fruit2、Fruit1”,那么这将无法正确配对。

假设dplyr:

select(fruits, starts_with("Color")) == "red"
# Color1 Color2 Color3
# 1 TRUE FALSE FALSE
# 2 FALSE FALSE TRUE
# 3 FALSE TRUE FALSE
# 4 FALSE FALSE FALSE
select(fruits, starts_with("Fruit")) == "apple"
# Fruit1 Fruit2 Fruit3
# 1 TRUE FALSE FALSE
# 2 FALSE FALSE FALSE
# 3 FALSE TRUE FALSE
# 4 TRUE FALSE FALSE
select(fruits, starts_with("Color")) == "red" & select(fruits, starts_with("Fruit")) == "apple"
# Color1 Color2 Color3
# 1 TRUE FALSE FALSE
# 2 FALSE FALSE FALSE
# 3 FALSE TRUE FALSE
# 4 FALSE FALSE FALSE

从这里开始,

fruits %>%
filter(
rowSums(
select(., starts_with("Color")) == "red" &
select(., starts_with("Fruit")) == "apple"
) > 0)
# Color1 Color2 Color3 Fruit1 Fruit2 Fruit3
# 1 red green green apple mango kiwi
# 3 green red . grape apple .

数据。因为我最初没有你的,所以我首先使用 . 制作了这个(因为阅读空列比我最初有时间花费更多的精力)。

fruits <- structure(list(Color1 = c("red", "yellow", "green", "yellow"), Color2 = c("green", "green", "red", "."), Color3 = c("green", "red", ".", "."), Fruit1 = c("apple", "banana", "grape", "apple"), Fruit2 = c("mango", "plum", "apple", "."), Fruit3 = c("kiwi", "mango", ".", ".")), class = "data.frame", row.names = c("1", "2", "3", "4"))

关于R - 跨两组列搜索两个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70441559/

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