当前行与后续行(同一列)之间的重复比较

时间:2019-02-28 03:29:01

标签: r apply

我有一个这样的数据框(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功能更好?

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

1 个答案:

答案 0 :(得分:0)

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

除此之外,您可以使用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)