#r #dplyr
#r #dplyr
Вопрос:
Добрый день ,
Предположим, у меня есть два фрейма данных, такие как :
Sensor_location Target_location detection_Probability
3 11 5 0.2943036
16 15 9 0.2943036
61 19 22 0.2943036
71 4 1 0.2943036
25 8 11 0.2943036
14 10 16 0.2943036
M1=structure(list(`Sensor_location ` = c(19, 15, 5, 13, 18, 8),
Target_location = c(22, 14, 2, 19, 12, 9), detection_Probability = c(0.294303552937154,
0.294303552937154, 0.294303552937154, 0.294303552937154,
0.294303552937154, 0.294303552937154)), row.names = c(21L,
45L, 38L, 17L, 3L, 28L), class = "data.frame")
И :
M2=structure(list(c(5L, 16L, 9L, 11L, 17L, 24L, 8L, 6L, 10L, 14L,
20L, 23L, 15L, 2L, 21L, 22L, 12L, 18L, 19L, 1L, 3L, 7L, 13L,
24L), c(11L, 22L, 15L, 17L, 23L, 23L, 14L, 12L, 16L, 20L, 23L,
24L, 21L, 8L, 24L, 23L, 18L, 24L, 22L, 7L, 9L, 13L, 19L, 23L),
c(6L, 17L, 12L, 12L, 18L, 21L, 11L, 5L, 11L, 17L, 21L, 22L,
18L, 5L, 20L, 19L, 11L, 17L, 20L, 4L, 6L, 10L, 16L, 22L),
c(4L, 13L, 8L, 10L, 16L, 18L, 9L, 3L, 7L, 15L, 19L, 20L,
14L, 3L, 15L, 16L, 9L, 15L, 13L, 2L, 2L, 8L, 14L, 21L), c(2L,
10L, 3L, 8L, 14L, 20L, 7L, 11L, 4L, 13L, 14L, 17L, 9L, 1L,
23L, 20L, 6L, 12L, 23L, 10L, 12L, 1L, 7L, 20L)), row.names = c(NA,
-24L), class = "data.frame")
1 5 11 6 4 2
2 16 22 17 13 10
3 9 15 12 8 3
4 11 17 12 10 8
5 17 23 18 16 14
6 24 23 21 18 20
7 8 14 11 9 7
8 6 12 5 3 11
9 10 16 11 7 4
10 14 20 17 15 13
11 20 23 21 19 14
12 23 24 22 20 17
13 15 21 18 14 9
14 2 8 5 3 1
15 21 24 20 15 23
16 22 23 19 16 20
17 12 18 11 9 6
18 18 24 17 15 12
19 19 22 20 13 23
20 1 7 4 2 10
21 3 9 6 2 12
22 7 13 10 8 1
23 13 19 16 14 7
24 24 23 22 21 20
Я ищу способ выборки строк M2
, например, из значений первого столбца (5,9,12,1,11,16)
M1[["Target_location"]]
. Пример :
1 5 11 6 4 2
3 9 15 12 8 3
17 12 18 11 9 6
20 1 7 4 2 10
4 11 17 12 10 8
2 16 22 17 13 10
В случае , если значение like 24
присутствует в M1[["Target_location"]]
, мы выбираем только одну возможность , из M2
которой означает :
6 24 23 21 18 20
or
24 24 23 22 21 20
Я попытался, но безуспешно:
M2 %>%
group_by(M2[,1]) %>%
filter(all(M1[["Target_location"]] %in% M2[,1]))
Я надеюсь, что мой вопрос понятен и выполним.
Большое спасибо за вашу помощь!
Ответ №1:
Я не вижу значения 24
в столбце «Целевое местоположение», поэтому я не уверен, что понял ваш вопрос.
Однако, если вы хотите вернуть все строки M2, значения которых в первом столбце находятся в пределах «Целевого местоположения» M1, приведенный ниже код будет работать:
M2 %>% filter(M2[, 1] %in% M1[, "Target_location"])
Комментарии:
1. Привет @Rosalie Bruel, я уже решил проблему с basic R. что-то вроде :
indicesToSampleFrom_2<-which(M2[,1] %in% M1[["Target_location"]]) M2[indicesToSampleFrom_2,]
Ответ №2:
Набор данных ‘M2’ не является стандартным data.frame, поскольку имена столбцов NULL
colnames(M2)
#NULL
Может быть, лучше сначала задать имена
subset(setNames(M2, paste0("X", seq_along(M2))), X1 %in% M1$Target_location)
хотя извлечение значений работает для набора данных, но в другом месте может произойти сбой
subset(M2, M2[,1] %in% M1$Target_location)