我有一个这样的数据框(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功能更好?
对不起,我的英语不好,非常感谢您的宝贵时间!
答案 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)