Добавить результаты e1071 matchControls обратно к исходным данным по номеру строки - PullRequest
0 голосов
/ 22 декабря 2018

Я хочу выполнить сопоставление 1: 1, используя подмножество моих данных, а затем добавить выходной код к моим исходным данным в качестве нового столбца.Вот рабочий пример с использованием примеров данных:

mydata <- iris
dfrm <- subset(mydata, mydata$Petal.Length>4)
library(e1071)
m <- matchControls(Species~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width,
                   data = dfrm, caselabel = "versicolor", contlabel = "virginica")

В выводе содержатся исходные номера строк, которые я хочу использовать при добавлении к исходным данным.

m$factor 
# 51   52   53   55   56   57   59   62   64   66   67   68   69   71   73   74   75   76   77 
# case case case case case case case case case case case case case case case case case case case 
# 78   79   84   85   86   87   88   89   91   92   95   96   97   98  100  101  102  103  104 
# case case case case case case case case case case case case case case case <NA> cont <NA> cont 
# 105  106  107  108  109  110  111  112  113  114  115  116  117  118  119  120  121  122  123 
# cont <NA> cont <NA> cont <NA> cont cont cont cont cont cont cont <NA> <NA> cont <NA> cont <NA> 
#  124  125  126  127  128  129  130  131  132  133  134  135  136  137  138  139  140  141  142 
# cont cont <NA> cont cont cont <NA> <NA> <NA> cont cont cont <NA> cont cont cont cont cont cont 
# 143  144  145  146  147  148  149  150 
# cont <NA> <NA> cont cont cont cont cont 

КогдаЯ пытаюсь добавить его непосредственно к исходным данным в виде нового столбца, получаю сообщение об ошибке из-за различных номеров строк:

mydata$output <- m$factor
# Error in `$<-.data.frame`(`*tmp*`, output, value = c(1L, 1L, 1L, 1L, 1L, :
# replacement has 84 rows, data has 150

Мои попытки поиска не увенчались успехом, возможно, не увенчались успехом, потому что я не знаю, как описать свойпроблема в правильной терминологии.Я попытался "объединить кадры данных по строкам" и т. Д., И то, что я получил , не показалось мне уместным.Некоторые автоматически предложенные дубликаты, такие как , этот предназначены для добавления агрегированных результатов обратно к исходным данным, что здесь не так.Я попытался использовать join на основе этого ответа , но я не знаю, как определить аргумент by в качестве номера строки, в отличие от фактической переменной.

library(dplyr)
left_join(mydata, as.data.frame(m$factor), by=NULL)
# Error: `by` required, because the data sources have no common variables

Я пробовал cbind, но он также выдает ошибку из-за разных номеров строк.

cbind(mydata, m$factor)
cbind(mydata, as.data.frame(m$factor))
# Error in data.frame(..., check.names = FALSE) : 
#   arguments imply differing number of rows: 150, 84

Чего мне не хватает?Спасибо.

1 Ответ

0 голосов
/ 22 декабря 2018

вам нужно будет создать переменную для присоединения ... ниже я использовал имена строк ...

library(dplyr)
left_join(mydata %>% mutate( rownumber = rownames(.) ),
          as.data.frame(m$factor) %>% mutate( rownumber = rownames(.) ), 
          by = "rownumber" )

#     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species rownumber m$factor
# 1            5.1         3.5          1.4         0.2     setosa         1     <NA>
# 2            4.9         3.0          1.4         0.2     setosa         2     <NA>
# 3            4.7         3.2          1.3         0.2     setosa         3     <NA>
# ...
# 96           5.7         3.0          4.2         1.2 versicolor        96     case
# 97           5.7         2.9          4.2         1.3 versicolor        97     case
# 98           6.2         2.9          4.3         1.3 versicolor        98     case
# 99           5.1         2.5          3.0         1.1 versicolor        99     <NA>
# 100          5.7         2.8          4.1         1.3 versicolor       100     case
# 101          6.3         3.3          6.0         2.5  virginica       101     <NA>
# 102          5.8         2.7          5.1         1.9  virginica       102     cont
# 103          7.1         3.0          5.9         2.1  virginica       103     <NA>
# 104          6.3         2.9          5.6         1.8  virginica       104     cont
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...