【问题标题】:Repeated comparisons between current row and following rows(on the same column)当前行和后续行之间的重复比较(在同一列上)
【发布时间】:2019-02-28 03:29:01
【问题描述】:

我有一个这样的数据框(5 行 1 列),

       data
row1    5
row2    4
row3    12
row4    6
row5    7

我想在当前行和后续行之间进行比较,如下表所示。

compare    YES  NO
row1<row2       0
row1<row3   1   
row1<row4   1   
row1<row5   1   
row2<row3   1   
row2<row4   1   
row2<row5   1   
row3<row4       0
row3<row5       0
row4<row5   1   

另外,我在 R 中用 for 循环输入了一些代码。

    for (i in 1:nrow(data)){
  if (data[i,] <data[(i+1):5,]){
    print("1")
  } else { 
    print ("0")
  } 
}

但是,我得到了错误信息。missing value where TRUE/FALSE needed

谁能帮我解决这个问题?或者,apply 函数可能更好?

抱歉我的英语不好,非常感谢您宝贵的时间!

【问题讨论】:

  • 请以可复制、可复制和粘贴的格式分享样本数据,并包括您的预期输出;截图从来都不是一个好主意。有关详细信息,请查看如何提供minimal reproducible example/attempt
  • 好的,谢谢。我刚刚编辑了,你能再帮我看看吗?

标签: r apply


【解决方案1】:

我不太清楚你的最终目标是什么;您的预期输出看起来像一种尴尬的数据格式。我认为这是为了遵守某种形式的自定义/旧数据格式要求。

除此之外,您可以使用outer 进行所有成对比较,然后进行一些数据整形

library(tidyverse)
outer(df$data, df$data, FUN = function(x, y) x < y) %>%
    as.data.frame() %>%
    rowid_to_column("rowx") %>%
    gather(rowy, val, -rowx) %>%
    mutate(
        rowx = paste0("row", rowx),
        rowy = sub("V", "row", rowy)) %>%
    filter(rowx < rowy) %>%
    unite(compare, rowx, rowy, sep = "<") %>%
    transmute(
        compare,
        Yes = if_else(val == TRUE, 1, 0),
        No = if_else(val == FALSE, 1, 0))
    )
#     compare Yes No
#1  row1<row2   1  0
#2  row1<row3   1  0
#3  row2<row3   1  0
#4  row1<row4   1  0
#5  row2<row4   0  1
#6  row3<row4   0  1
#7  row1<row5   1  0
#8  row2<row5   1  0
#9  row3<row5   0  1
#10 row4<row5   1  0

样本数据

df <- read.table(text =
    "data
1   0.05493405
2   0.07844055
3   0.12901255
4   0.0655028
5   0.078554925", header = T)

【讨论】:

  • 首先谢谢!并为我的不准确描述道歉。这一次,我稍微改变了我的两个数据框。我真正的目标是比较第一行数据中的每一行和接下来的其他行。例如,row1 与 row2、row3、row4、row5 进行比较,row2 与 row3、row4、row5 进行比较,类似于 row3、row4、row5。结果,row1(5)
  • @MinWu 我很困惑;你所描述的正是我对outer所做的。
  • 它有效!真的感谢!祝你有美好的一天!
猜你喜欢
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 2018-10-31
相关资源
最近更新 更多