如何在R数据帧中对数字进行逐行比较

时间:2016-04-28 04:49:03

标签: r dataframe

我有一个如下所示的数据框。

return message;

我有名为Select min(id) from ID having count(*)>1的列和两个计算列SampleDF <- structure(list(FirstVal = c(100, 230, 450, 600), SecondVal = c(566, 547, 557, 250), ThirdVal = c(782, 479, 823, 178), LowerLimit = c(10, 15, 22, 50), UpperLimit = c(600, 500, 600, 500)), .Names = c("FirstVal", "SecondVal", "ThirdVal", "LowerLimit", "UpperLimit"), row.names = c(NA, 4L), class = "data.frame")

我试图从每一行中选择元素,这些元素属于下限和上限,并丢弃UpperLimit之外的任何元素。消除之后,我想找出剩下的哪个元素是最大的,并将其添加到新列中。

此外,我希望添加列名称。我试过通过转置我的原始数据框来实现这一目的,但我在引用原始列时遇到了麻烦。

如何在R中执行行式比较?

预期产出:

FirstVal, SecondVal and ThirdVal

2 个答案:

答案 0 :(得分:2)

您可以尝试:

tmp<-(SampleDF[,1:3]>=SampleDF$LowerLimit & SampleDF[,1:3]<=SampleDF$UpperLimit)*as.matrix(SampleDF[,1:3])
colnames(SampleDF[,1:3])[max.col(tmp*NA^(rowSums(tmp)==0))]
#[1] "SecondVal" "ThirdVal"  "SecondVal" "SecondVal"

答案 1 :(得分:1)

这个有效!

1.首先找出不属于极限的值并将其删除。

2.找出其他元素中的哪一个是最大值并从名称中提取名称。

 x<-sapply(SampleDF[,1:3],function(x) ifelse(x > SampleDF$LowerLimit & x < SampleDF$UpperLimit,x,NA))

SampleDf$Columnname <-  colnames(x)[apply(x,1,which.max)]