我有一个数据集,其中包含两列的值列表,我希望能够对每一行的列表进行相互比较.例如,我有3个小组,其中预期的数字是一定的,而观察到的是其他数字.我想将观察到的列与预期的列进行比较,看看哪些数字是预期的,但没有观察到.

Group Expected Observed
A 4:8 c(4, 5, 7)
B 7:12 c(7, 8, 9, 10, 12)
C 6:10 c(6, 8, 10)

我需要一个名为Missing的额外列,它包含Expect中但未观察到的所有值.

Group Expected Observed Missing
A 4:8 c(4, 5, 7) c(6, 8)
B 7:12 c(7, 8, 9, 10, 12) 11
C 6:11 c(6, 8, 11) c(7, 9, 10)

我try 使用setdiff()和base R,因为它可以找到两个列表之间的不同值.但是,我不能让它以每行比较列表的方式工作.

df$Missing <- setdiff(df$Expected, df$Observed) 

df$Missing <- df$Expected[!(df$Expected %in% df$Observed)]

这两个选项都会产生预期的完整列表.这是我得到的输出:

Group Expected Observed Missing
A 4:8 c(4, 5, 7) 4:8
B 7:12 c(7, 8, 9, 10, 12) 7:12
C 6:11 c(6, 8, 11) 6:11

有没有什么方法可以比较每个组的两个列表(观察值和期望值),这样我就可以看到每个组缺少哪些值?提前感谢您的帮助!

推荐答案

因为你有 list ,所以用Map加上setdiff-

df$Missing <- Map(setdiff, df$Expected, df$Observed)
df

#  Group            Expected        Observed Missing
#1     A       4, 5, 6, 7, 8         4, 5, 7    6, 8
#2     B 7, 8, 9, 10, 11, 12 7, 8, 9, 10, 12      11
#3     C      6, 7, 8, 9, 10        6, 8, 10    7, 9

data

如果您以reproducible format为单位提供数据,则更容易提供帮助.

df <- structure(list(Group = c("A", "B", "C"), Expected = list(4:8, 
    7:12, 6:10), Observed = list(c(4, 5, 7), c(7, 8, 9, 10, 12
), c(6, 8, 10))), row.names = c(NA, -3L), class = "data.frame")

R相关问答推荐

更新合适的R mgcv::bam模型报告无效类型(关闭).'';错误

从嵌套列表中智能提取线性模型系数

terra nearest()仅为所有`to_id`列返回NA

使用R中相同值创建分组观测指标

警告:lmdif:info = 0. nls. lm()函数的输入参数不正确

R Sapply函数产生的值似乎与for循环方法略有不同

如何改变x轴比例的列在面

IMF IFS数据以R表示

如果可能,将数字列转换为整数,否则保留为数字

将饼图插入条形图

哪一行和行和 Select 特定行,但是考虑到Nas

R -如何分配夜间GPS数据(即跨越午夜的数据)相同的开始日期?

按列中显示的配对组估算NA值

有没有办法定制Plot(allEffects())面板标题?

如何提取R中其他字符串和数字之间的字符串?

以任意顺序提取具有多个可能匹配项的组匹配项

以R表示的NaN值的IS.NA状态

将日期列从字符转换为日期得到的结果是NAS

将每晚的平均值与每晚的值进行比较,统计是否有效?

如何在GGPlot中控制多个图例和线型