簡體   English   中英

合並 R 中的行索引(by = 0 和 by = "row.names" 不起作用)

[英]Merging on row index in R (by = 0 and by = "row.names" not working)

Tl;dr - 我正在嘗試將 merge.data.table() function 與行索引一起使用,R 文檔中給出的建議不起作用。

我的數據大致是:

library(data.table)
library(quantreg)
library(purrr)

foo <- expand.grid(c(seq(60001, 60050, by = 1),
                   c("18-30", "31-60", "61+"),
                   c("pre", "during", "after"))
foo <- as.data.table(foo)
setnames(foo, names(foo), c("zip", "agegroup", "period"))
foo <- cbind(foo, 
             quartile = floor(runif(n = nrow(foo), 1, 4)),
             times = runif(n = nrow(foo), 18, 25))

我對數據進行了幾次分位數回歸,按年齡組(應他人的要求)進行了子集化。

v_tau <- c(0.01, 0.025, seq(0.05, 0.95, by = 0.05), 0.975, 0.99)

mq_age1 <- map(v_tau, ~rq(data = foo[agegroup == "18-30",], 
               times ~ quartile + period + quartile*period,
               tau = .x))  

我正在嘗試將來自rq() object 的預測擬合值向量與原始 data.table 合並(我也可以將其轉換為 dataframe,它不一定是數據表)。 該向量比 data.table 中的行數短,因此我一直在嘗試將此處給出的答案應用於plm() object,進行修改以說明我的擬合值沒有多個索引屬性這一事實。

所以,我一直在嘗試做的是按行索引加入它們。 我意識到我可以創建另一個帶有顯式索引的列,但我想避免這種情況,因為擬合值來自數據的一個子集,而我將它們連接到數據的一個子集; 添加顯式索引是可能的,但不是統一的或簡約的,並且最終會生成很多我不想處理的 NA。

fitted <- mq_age1[[10]]$fitted.values
d_fitted <- cbind(attr(fitted, "index"),
                    fitted = fitted)

foo2 <- merge(foo[agegroup == "18-30",], d_fitted, by = 0, all.x = TRUE) 

查看merge() 文檔,它說:“要合並的列可以按名稱、數字或邏輯向量指定:名稱“row.names”或數字 0 指定行名稱。如果按名稱指定它必須唯一對應於輸入中的命名列。”

但是,當我嘗試這樣做時,它會給我以下錯誤消息:

Error in 
merge.data.table(foo[agegroup == "18-30", ], d_fitted, by = 0,  : 
A non-empty vector of column names for `by` is required.

同樣,當我嘗試使用“row.names”時:

foo2 <- merge(foo[agegroup == "18-30",], d_fitted, by = "row.names", all.x = TRUE)
Error in merge.data.table(foo[agegroup == "18-30", ], d_fitted, by = "row.names",  : 
  Elements listed in `by` must be valid column names in x and y

到底是怎么回事? 為什么我不能這樣做?

找到了答案:@r2evans 友善地指出 base::merge 有這個功能,而 data.table::merge 沒有。

foo <- as.data.frame(foo)

foo2 <- merge(foo[foo$agegroup == "18-49",], d_fitted, by = 0, all.x = TRUE)

成功了。 謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM