【问题标题】:How to know if the row contains "values" in either of the lists?如何知道该行是否在任一列表中包含“值”?
【发布时间】:2020-12-07 20:07:02
【问题描述】:
a<- c("H","W")
b<- c("Y","S","I")

df1 <- t(data.frame(c("Y","S","I","F","C","T","V")))
df2 <- t(data.frame(c("Y","S","I","Y","Y","Y","Y")))
df3 <- t(data.frame(c("H","H","W")))

''' 如何拥有一个函数,这样当我应用它时,df1 将显示为 FALSE,因为它不仅包含“a”或“b”中的那些元素,而 df2 和 df3 将显示为 TRUE,因为 df2 包含“b”中的元素和df3 包含“a”中的元素?

谢谢!

【问题讨论】:

  • df1 以与 df2 相同的方式包含 b 的所有元素。你能检查你的问题吗?你的代码也有错误,因为括号没有关闭 dfs
  • 嗨,因为 df1 包含 a 或 b 之外的元素,所以我想将其设为 false。对不起,我不明白括号不要关闭 dfs..

标签: r


【解决方案1】:

您可以检查数据框列中的唯一值是否与两个向量之一中的值相同。我们必须在进行比较之前对值进行排序,以确保它们相同:

a<- c("H","W")
b<- c("Y","S","I")

df1 <- data.frame(c("Y","S","I","F","C","T","V"))
df2 <- data.frame(c("Y","S","I","Y","Y","Y","Y"))
df3 <- data.frame(c("H","H","W"))

func <- function(df, vec1, vec2) {
  vec1 = sort(vec1)
  vec2 = sort(vec2)
  unique = sort(unique(df[,1]))
  identical(unique,vec1) | identical(unique,vec2)
}

> func(df1,a,b)
[1] FALSE
> func(df2,a,b)
[1] TRUE
> func(df3,a,b)
[1] TRUE
> 

顺便说一句,我从您的示例中删除了转置,因为没有右括号。

【讨论】:

  • 如果 c
  • 这里的c是什么意思?这是新向量的新数据框吗?
【解决方案2】:

您可以使用all%in% 来测试df1、df2 或df3 的所有元素是否在ab 中。

all(df1 %in% a | df1 %in% b)
#[1] FALSE
all(df2 %in% a | df2 %in% b)
#[1] TRUE
all(df3 %in% a | df3 %in% b)
#[1] TRUE

或者如果 ab 应该合并:

all(df1 %in% c(a,b))

【讨论】:

    猜你喜欢
    • 2015-09-13
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多