【问题标题】:Print max value in row and column name R在行和列名 R 中打印最大值
【发布时间】:2020-01-11 12:51:02
【问题描述】:

我正在尝试创建一个函数,该函数接收数据框和数据框第一列的值。我们将数据框第一列的值称为“value1”。这意味着函数应该是一个形式

Function <- function (data, value1)

如果从数据中找到“value1”,则返回“value1”,“value1”所在行的最大值,最大值的列名。

如果没有找到“value1”,它应该返回“检查值”。

到目前为止我做了什么:

value1 <- function(data) {
data[1]
}

Function <- function (data, "value1") {
if(any(value1 %in% data[[1]])) {
maxcol <- which.max(data[value1,])
print(paste(value1, data[maxcol,], data[maxcol, value1]))
} else {
print("Check value")}
}

我单独创建了“value1”,因为我不知道该怎么做。

我的问题是当找到“value1”时该函数没有打印正确的东西。

【问题讨论】:

  • 您可以使用 dput() 发布可重现的数据吗?这使您更容易理解您的要求。

标签: r function if-statement return


【解决方案1】:
set.seed(0)
df <- data.frame(indexValue = sample(letters, size=5),
                  col2 = runif(n=5),
                  col3 = runif(n=5))
df

  indexValue      col2       col3
1          n 0.2016819 0.06178627
2          y 0.8983897 0.20597457
3          d 0.9446753 0.17655675
4          g 0.6607978 0.68702285
5          a 0.6291140 0.38410372

lookup <- function(data, value1){
     rowFound <- min(which(data$indexValue==value1))
     if(! rowFound <= length(data)){"Check value"} else {
       paste0(names(data)[rowFound+1], ": ", apply(data[rowFound, c('col2', 'col3')], 1, max))}}

lookup(df, 'n')
[1] "col2: 0.201681931037456"
> lookup(df, 'c')
[1] "Check value" 

【讨论】:

  • 感谢您的回答!但是,我无法理解 min(which(data$indexValue==value1)) 部分。因为我希望 value1 是第一列的值,所以 data$indexValue==value1 不是很明显吗?我可能是错的,但我现在应该在我的 value1 中更改一些内容以使此代码正常工作吗?我认为我的 value1 现在正在获取整个第一列,而不是从中获取值....
【解决方案2】:
set.seed(0)
df <- data.frame(A=c(3,2,1,4,5),B=c(1,6,3,8,4),C=c(2,1,4,8,9))

  A B C
1 3 1 2
2 2 6 1
3 1 3 4
4 4 8 8
5 5 4 9

foo1 <- function(Column,Value){
  pos <- which(Column[-1] == Value)
  if(length(pos)==0){result <- "Check value"}
  else {result <- paste(Value,max(Column[-1],na.rm = TRUE),
                        Column[1],sep=",")}
  result
}

# check after 2

apply(rbind(colnames(df),df),2,function(x) foo1(x,2))

       A             B             C 
      "2,5,A" "Check value"       "2,9,C" 

【讨论】:

  • 感谢您的回答!不幸的是,我需要该函数来接收数据框。会这样吗?
  • 您好,您能提供一个您希望输出的示例吗?
猜你喜欢
  • 1970-01-01
  • 2018-07-07
  • 2019-05-26
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-20
  • 2019-02-21
相关资源
最近更新 更多