【问题标题】:R function to assign value based on multiple columnsR函数基于多列分配值
【发布时间】:2014-10-28 07:21:49
【问题描述】:

我有一个函数,它根据 b 列中的条目为数据框的 c 列分配一个值(猫、狗或兔子):

mydf <- data.frame(a = c(1:4), b= c(1,3,5,9))
myfunction <- function(x) { 
if(x == 1 | x == 2) y <- "cat"
if(x > 2 & x < 6) y <- "dog"
if(x > 6) y <- "rabbit"
return(y)
 }
mydf$c <- sapply(mydf$b,myfunction)

现在我想编写一个函数,使赋值以列 a 和 b 的值为条件。例如,条件可能是: A: cat 当且仅当 mydf$a == 1 & mydf$b == 1; B:无论 mydf$b 的值如何,只要 mydf$a == 2 以及 mydf$a == 3 & mydf$b == 5 都会分配 dog; C:兔子被分配给其他情况。语法有些问题,找不到上一篇文章中的示例。

【问题讨论】:

  • 在你的描述中写着mydf$a==2 regardless of the value of mydf$b,而在代码中写着x &gt;2 &amp; x &lt;6哪一个是正确的?

标签: r function sapply


【解决方案1】:

你可以试试ifelse

 indx <- as.character(interaction(mydf,sep=""))
 mydf$c <- ifelse(indx=='11', 'cat', 
       ifelse(substr(indx,1,1)=='2'|indx=='35', 'dog', 'rabbit')) 

 mydf
 #  a b      c
 #1 1 1    cat
 #2 2 3    dog
 #3 3 5    dog
 #4 4 9 rabbit

【讨论】:

  • 这个答案效果很好,我学到了两个非常方便的技巧(交互和 substr)。非常感谢!
  • @marcel 您可以对该列的子集进行操作,即。 indx &lt;- as.character(interaction(df[,3:4], sep=""))。除了列号,您还可以使用colnames 即。 df[, c("SomeColumn3", "SomeColumn4")]
猜你喜欢
  • 2017-08-05
  • 2017-12-22
  • 2019-01-12
  • 2019-11-18
  • 1970-01-01
  • 2021-12-21
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多