Я хочу выполнить сопоставление 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
Чего мне не хватает?Спасибо.