我正在尝试检查滚动窗口中的字符串是否彼此完全相同,如果是,则在新列中报告相同的值,如果不相同,则报告NA。我的数据看起来像这样:
param()
我想检查LAME列是否匹配。
我希望它看起来像下面这样:
Sample_ID distance Sr87Sr86 LAME
2014_0385 669 0.70868 SAL
2003_0141 702 0.7079 SAL
2008_0089 644 0.70818 SAL
2013_6380 452 0.70813 SAL
2006_0328 1226 0.70838 FW
2014_0106 784 0.7086 SAL
2006_0028 1750 0.70853 SAL
2007_0241 462 0.70621 SAL
2011_0313 393 0.70645 SAL
2010_0233 880 0.70688 SAL
其中我使用左对齐的3行滚动窗口。特定窗口大小或左对齐并不重要,重点是当它滚动时,它会检查窗口中的所有值是否相同。
我目前尝试的是以下内容:
Sample_ID distance Sr87Sr86 LAME LAME_roll
2014_0385 669 0.70868 SAL SAL
2003_0141 702 0.7079 SAL SAL
2008_0089 644 0.70818 SAL NA
2013_6380 452 0.70813 SAL NA
2006_0328 1226 0.70838 FW NA
2014_0106 784 0.7086 SAL SAL
2006_0028 1750 0.70853 SAL SAL
2007_0241 462 0.70621 SAL SAL
2011_0313 393 0.70645 SAL SAL
2010_0233 880 0.70688 SAL SAL
其中all.identical是一个自定义函数,执行以下操作:
data$LAME_roll = rollapply(data$LAME, width = 3, align = "left", FUN = all.identical, partial = TRUE, fill = NA)
这似乎有效,但如果您要求查看LAME_roll为{NA}且all.identical = function(x) {
if(length(unique(x)) > 1) {
NA
} else {
unique(x)
}
}
的行,则会返回所有值均为NA的行,包括行名称。这是怎么回事?有没有更好的方法来实现这一目标?或者有没有办法摆脱那些NA行?查看数据框时,只有在尝试查看数据子集时才会显示它们。