【问题标题】:Creating a new column in a data.frame with an "if else" structure [duplicate]在具有“if else”结构的data.frame中创建一个新列[重复]
【发布时间】:2020-05-27 08:20:03
【问题描述】:

我想在数据框中创建一个新列,其中数据框的单元格将取决于条件。这是一些可重现的代码:

a <- c("Boy","Girl","Dog","Cat")
b <- c("1","2","3","4")
df <- data.frame(a,b)

if(df$a=="Boy"|df$b=="Girl"){

  df$Type <- "Human"
}
else(
  df$Type <- "Animal"
)
# This is what I would like to achieve :
df$Type <- c("Human","Human","Animal","Animal")

但是在执行条件时,这是我得到的错误消息:

Warning message:
In if (df$a == "Boy" | df$b == "Girl") { :
  condition has a length > 1 only the first element is used

【问题讨论】:

  • 使用df$a %in% c("Boy", "Girl")而不是|
  • 更像df$Type &lt;- ifelse(df$a %in% c("Boy", "Girl"), "Human","Animal")
  • df$Type &lt;- ifelse(df$a == "Boy" | df$b == "Girl", "Human", "Animal")。但请注意,您正在检查 b 列中的 "Girl",这与您的数据不匹配。
  • 当输入 "if(df$a %in% c("Boy", "Girl")){ df$Type 1
  • @Axeman 是的,对不起,我的意思是 df$a == "Girl

标签: r dataframe conditional-statements


【解决方案1】:

使用dplyr::case_when

library(dplyr)

df %>% 
  mutate(type = case_when(
    a %in% c("Boy", "Girl") ~ "Human",
    TRUE ~ "Animal"
  )
)

【讨论】:

  • 因为只有一个条件被测试,你可以使用 base ifelse;不需要dplyr::case_when
猜你喜欢
  • 1970-01-01
  • 2020-06-20
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多