【问题标题】:Checking the value in the dataframe in R在 R 中检查数据框中的值
【发布时间】:2019-02-13 17:36:38
【问题描述】:

以下是我的r 代码。我正在尝试检查真实值 a = 10 是否包含或包含在数据框中。如果它包含在数据帧中,那么我需要计算该数据帧的长度,否则我想分配长度0

假设我正在检查的值是10

k1 = c(1,2,3,5,6) 
k2 = c(10,12,13,15,16,18)  

例如,对于k1 集,我想获得长度0,而对于k2,长度必须是6

我尝试使用以下代码来完成这项工作

library(tidyverse)
map_lgl(k, `%in%`, x = 10) %>% length

为什么它不适用于 k1 数据集?

【问题讨论】:

  • 什么不起作用?它现在返回了什么? MCVE 请stackoverflow.com/help/mcve
  • @christopherlovell,但对于k1,我也收到了5。我想要0 用于k1 数据集,因为10 不包含在集合中。

标签: r dataframe if-statement


【解决方案1】:

您可以使用简单的ifelse 语句来做到这一点 - 不需要其他任何东西。

a <- 10
ifelse(a %in% k2, length(k2), 0)

[1] 0

您可以包装一个函数并输入不同的集合:

my_func <- function(x){
ifelse(a %in% x, length(x), 0)
}

my_func(k2)

[1] 6

【讨论】:

    【解决方案2】:

    如果您有更多 K(i) 列表(例如 100 个)并且需要与所有列表交互,则可以使用循环并将结果存储在恢复表中。

    我从未见过 map_lgl,但我们可以使用 R 的~硬代码~,比如:

    k1 <- c(1,2,3,5,6) 
    k2 <- c(10,12,13,15,16,18)  
    
    results <- data.frame()
    
    for(i in 1:2){
    
      analysis <- get(paste("k",i,sep=""))
    
      if(10 %in% analysis){
        results[nrow(results)+1, 1] <- paste("k",i,sep="")
        results[nrow(results), 2] <- length(analysis)
      } else{
        results[nrow(results)+1, 1] <- paste("k",i,sep="")
        results[nrow(results), 2] <- 0
      }
    
    }
    

    比我们得到的:

    【讨论】:

      猜你喜欢
      • 2023-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      相关资源
      最近更新 更多