Извлечение строк из данных в R с условиями на объектах - PullRequest
0 голосов
/ 08 июня 2018

У меня есть набор данных, который я загружаю в RStudio, который содержит 6 входных функций и 2 выхода с 4000 наблюдениями.Я хотел бы построить из этих данных еще один набор данных, который содержит фиксированные значения 5 входных объектов и только один входной сигнал, который изменяется.Допустим, мои данные определяются следующим образом:

In1 In2 In3 In4 In5 In6 Out1 Out2
4    3   2   4   2   10  0.4  0.5
4    3   2   3   2   7   0.6  0.8
2    3   1   4   2   9   0.2  0.1
4    3   2   4   2   8   0.8  0.7
4    5   6   4   2   1   0.9  0.1
4    3   2   4   2   3   0.4  0.5

Что я хотел бы получить (где все входные данные являются постоянными, кроме In6)

In1 In2 In3 In4 In5 In6 Out1 Out2
4    3   2   4   2   10  0.4  0.5
4    3   2   4   2   8   0.8  0.7
4    3   2   4   2   3   0.4  0.5

Как я могу сделать это в R?Большое спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 08 июня 2018
df = read.table(text = "
In1 In2 In3 In4 In5 In6 Out1 Out2
                4    3   2   4   2   10  0.4  0.5
                4    3   2   3   2   7   0.6  0.8
                2    3   1   4   2   9   0.2  0.1
                4    3   2   4   2   8   0.8  0.7
                4    5   6   4   2   1   0.9  0.1
                4    3   2   4   2   3   0.4  0.5
                ", header=T)

library(dplyr)

df %>%
  group_by(In1,In2,In3,In4,In5) %>%  # for those variables
  mutate(n = n()) %>%                # count number of combination and add it as a column
  ungroup() %>%                      # forget the grouping
  filter(n == max(n)) %>%            # return the rows with the most popular combination
  select(-n)                         # remove the counts

# # A tibble: 3 x 8
#     In1   In2   In3   In4   In5   In6  Out1  Out2
#   <int> <int> <int> <int> <int> <int> <dbl> <dbl>
# 1     4     3     2     4     2    10   0.4   0.5
# 2     4     3     2     4     2     8   0.8   0.7
# 3     4     3     2     4     2     3   0.4   0.5

При таком подходе предполагается, что у вас всегда будет выигрышная комбинация, и что вы заботитесь только об этой выигрышной комбинации.

0 голосов
/ 08 июня 2018

Это приводит к запрошенному выводу из ввода, но я не знаю, обобщается ли оно в более широкий случай.

Сначала я определяю фрейм данных df

df <- read.table(text = "In1 In2 In3 In4 In5 In6 Out1 Out2
4    3   2   4   2   10  0.4  0.5
4    3   2   3   2   7   0.6  0.8
2    3   1   4   2   9   0.2  0.1
4    3   2   4   2   8   0.8  0.7
4    5   6   4   2   1   0.9  0.1
4    3   2   4   2   3   0.4  0.5", header = TRUE)

Затем я ищу дублирующиеся строки в столбцах с 1 по 5.

df[duplicated(df[, 1:5])|duplicated(df[, 1:5], fromLast = TRUE),]

#   In1 In2 In3 In4 In5 In6 Out1 Out2
# 1   4   3   2   4   2  10  0.4  0.5
# 4   4   3   2   4   2   8  0.8  0.7
# 6   4   3   2   4   2   3  0.4  0.5

Это пробует все возможные комбинации входов.Я нахожу все возможные комбинации 5 столбцов из 6 входов.

col_combinations <- combn(1:6, 5)

Затем я проверяю каждый.

apply(col_combinations, MAR = 2, 
      function(x)df[duplicated(df[, x])|duplicated(df[, x], fromLast = TRUE),])

Как видите, успешен только один.

# [[1]]
#   In1 In2 In3 In4 In5 In6 Out1 Out2
# 1   4   3   2   4   2  10  0.4  0.5
# 4   4   3   2   4   2   8  0.8  0.7
# 6   4   3   2   4   2   3  0.4  0.5
# 
# [[2]]
# [1] In1  In2  In3  In4  In5  In6  Out1 Out2
# <0 rows> (or 0-length row.names)
# 
# [[3]]
# [1] In1  In2  In3  In4  In5  In6  Out1 Out2
# <0 rows> (or 0-length row.names)
# 
# [[4]]
# [1] In1  In2  In3  In4  In5  In6  Out1 Out2
# <0 rows> (or 0-length row.names)
# 
# [[5]]
# [1] In1  In2  In3  In4  In5  In6  Out1 Out2
# <0 rows> (or 0-length row.names)
# 
# [[6]]
# [1] In1  In2  In3  In4  In5  In6  Out1 Out2
# <0 rows> (or 0-length row.names)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...