【问题标题】:R: error handling in finding the row number of a dataframeR:查找数据帧行号时的错误处理
【发布时间】:2019-12-25 15:21:24
【问题描述】:

我有一个带有 ID 列和另一个虚拟列的数据框。在第一步中,用户输入一个应该是 ID 之一的数字(ID_edit)。然后确定相应的行索引。如果 ID 在数据框中,一切正常。如果不是(因为用户输入了错误的 ID 或根本没有 ID)应该有错误消息。我试过这个:

  test_df <- data.frame("ID" = c(1,3,6,8),
                        "char" = c("a","b","c","d"))

  ID_edit <- as.integer(2)
  row_nr_df <- which(test_df$ID == ID_edit, arr.ind=TRUE)

  View(test_df$ID)
  row_list <- as.numeric(rownames(test_df))

  if(!is.null(row_nr_df %in% row_list)) {
    print("Row number in row list")
  } else {
    print("Row number not in row list")}

  View(row_nr_df)

如果我改变了

  ID_edit <- as.integer(1)

正在工作,到

  ID_edit <- as.integer(2)

if 语句仍然是 TRUE,但我希望并希望这里有 else 块。

View(row_nr_df)

然后显示消息“表中没有可用数据”。

最后我想用行号访问数据框,例如:

char_edit <- test_df$char[[row_nr_df]] 

但如果行号不存在,这不起作用。

【问题讨论】:

  • 预期的结果是什么?您是否希望能够通过 1) 访问数据框。如果 ID_edit 在 ID 中(如果存在,则 ID_edit 与 ID_edit 匹配)和 2)。如果 ID_edit 不在 ID 列中,则直接由 ID_edit 给出的行号?还是只想知道行号以及是否在ID列?
  • 用户输入一个 ID,它可以是一个整数或什么都没有。然后检查输入的ID是否在'test_df&ID'中。 a) 如果 ID 在“test_df&ID”中,则找到相应的行索引“row_nr_df”并使用该索引访问数据帧“test_df”。 b) 如果 ID 不在 'test_df&ID' 中或 ID 为空(无整数),则给出错误警告(-> else 语句)。
  • 所以如果它在列表中就不需要说(“行列表中的行号”),而只需返回行?

标签: r dataframe if-statement indexing row


【解决方案1】:
 test_df <- data.frame("ID" = c(1,3,6,8),
                       "char" = c("a","b","c","d"))

 isin<-function(x,data)
 {if(length(which(data$ID == x, arr.ind=TRUE))>=1)
     {data[which(data$ID == x, arr.ind=TRUE),]}
   else{"not in list"}}

> isin(x=3,data=test_df)
  ID char
2  3    b
> isin(x=2,data=test_df)
[1] "not in list"

【讨论】:

    猜你喜欢
    • 2014-05-27
    • 2015-07-01
    • 2014-06-12
    • 2018-09-14
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    相关资源
    最近更新 更多