我想使用数据的子集进行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
我的搜索尝试失败了,也许是失败了,因为我不知道如何用正确的术语来描述我的问题。我尝试过“按行合并数据帧”等,而what I got似乎并不重要。一些自动建议的重复项,例如this one,是关于将汇总结果添加回原始数据的,这里不是这种情况。我尝试基于this answer使用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
我想念什么?谢谢。
答案 0 :(得分:1)
您将必须创建一个变量才能加入... 下面我使用行名...
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