Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 跨列将精确值与许多有效数字进行比较_R_Filtering_Data Manipulation - Fatal编程技术网

R 跨列将精确值与许多有效数字进行比较

R 跨列将精确值与许多有效数字进行比较,r,filtering,data-manipulation,R,Filtering,Data Manipulation,我有一个数字表,有许多不同的有效数字。我需要在各列中找到这些数字的精确匹配-例如 find_mz_matches <- data.frame("mz1" = c(3.14222, 314.12003, 214.220, 254.111223, NA, NA, NA, NA, NA), "mz2" = c(3.14222, 456.2200001, NA, NA, NA, NA, NA, NA, NA), "mz3" = c(300.112223, 456.2200001, 3.1422

我有一个数字表,有许多不同的有效数字。我需要在各列中找到这些数字的精确匹配-例如

find_mz_matches <- data.frame("mz1" = c(3.14222, 314.12003, 214.220, 
254.111223, NA, NA, NA, NA, NA), "mz2" = c(3.14222, 456.2200001, NA, 
NA, NA, NA, NA, NA, NA), "mz3" = c(300.112223, 456.2200001, 3.14222, 
254.111223, 900.232, 476.0012503, 459.00201, 500.60402, 300.4053102))
并比较这三个方面:

mz_all
3.14222
我拼凑出了一些几乎有效的东西,但问题是它在某个地方舍入,我的输出包括相似但不相同的数字,例如3.14222不应该与3.14223匹配。输出中还包括NAs,这是不需要的

duplicates_across1 <- find_mz_matches[find_mz_matches$mz1 
%in% find_mz_matches$mz2, ]

duplicates\u across1我会做如下事情:

find_mz_matches <- data.frame("mz1" = c(3.14222, 314.12003, 214.220, 
                                        254.111223, NA, NA, NA, NA, NA), "mz2" = c(3.14222, 456.2200001, NA, 
                                                                                   NA, NA, NA, NA, NA, NA), "mz3" = c(300.112223, 456.2200001, 3.14222, 
                                                                                                                      254.111223, 900.232, 476.0012503, 459.00201, 500.60402, 300.4053102))
find_mz_matches$mz_allmz1mz2 <- ifelse(find_mz_matches$mz1 == find_mz_matches$mz2 ,find_mz_matches$mz1   , NA)
find_mz_matches$mz_allmz2mz3 <- ifelse(find_mz_matches$mz2 == find_mz_matches$mz3 ,find_mz_matches$mz2   , NA)
查找匹配项请参见
Reduce()

参数
accumulate
是可选的-它只是显示正在发生的事情。对于您的使用,您可以将其取出,结果将是3.14222

Reduce(intersect, find_mz_matches)
[1] 3.14222

下面是一个非常
lappy
-y的答案,它比较每个组合并将结果存储在列表中。如果您有超过3列,那么它应该是灵活的。祝你好运

# Creating all combinations of columns in a list (and flattening it with unlist)
combos <- unlist(lapply(2:ncol(find_mz_matches), combn, x = find_mz_matches, simplify = F), recursive = F)

# Checking for common elements
common_elements <- lapply(combos, function(x) Reduce(base::intersect, x))

# Renaming the elements
names(common_elements) <- sapply(lapply(combos, names), paste, collapse = "_")

common_elements
$mz1_mz2
[1] 3.14222      NA

$mz1_mz3
[1]   3.14222 254.11122

$mz2_mz3
[1]   3.14222 456.22000

$mz1_mz2_mz3
[1] 3.14222
#创建列表中所有列的组合(并使用unlist将其展平)

combos感谢您的输入,但似乎仍有问题。第三行返回
$
Reduce(intersect, find_mz_matches, accumulate = T)
Reduce(intersect, find_mz_matches, accumulate = T, right = T)
Reduce(intersect, find_mz_matches)
[1] 3.14222
# Creating all combinations of columns in a list (and flattening it with unlist)
combos <- unlist(lapply(2:ncol(find_mz_matches), combn, x = find_mz_matches, simplify = F), recursive = F)

# Checking for common elements
common_elements <- lapply(combos, function(x) Reduce(base::intersect, x))

# Renaming the elements
names(common_elements) <- sapply(lapply(combos, names), paste, collapse = "_")

common_elements
$mz1_mz2
[1] 3.14222      NA

$mz1_mz3
[1]   3.14222 254.11122

$mz2_mz3
[1]   3.14222 456.22000

$mz1_mz2_mz3
[1] 3.14222