我有一个如下所示的数据框。
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
答案 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)]