[英]How to assign a subset from a data frame `a' to a subset of data frame `b'
這可能是一個瑣碎的問題(我是R的新手),但是無論是在SO還是其他地方,我都找不到答案。 我的情況如下。
我有一個數據框df
,我想更新一個子集df$tag
值。 df
與以下類似:
id = rep( c(1:4), 3)
tag = rep( c("aaa", "bbb", "rrr", "fff"), 3)
df = data.frame(id, tag)
然后,我嘗試使用match()
從數據幀的子集更新列tag
,方法是使用包含兩個列(即key
和value
)的第二個數據幀(例如aux)。 子集由id = n定義,根據n in unique(df$id)
。 aux
如下所示:
> aux
key value
"aaa" "valueAA"
"bbb" "valueBB"
"rrr" "valueRR"
"fff" "valueFF"
我試圖遍歷數據框,如下所示:
for(i in unique(df$id)){
indexer = df$id == i
# here is how I tried to update the dame frame:
df[indexer,]$tag <- aux[match(df[indexer,]$tag, aux$key),]$value
}
預期的結果是df[indexer,]$tag
用aux$value
的相應值更新了。 實際結果是df$tag
與NA相符。 我沒有任何錯誤,但是出現了以下警告消息:
在'[<-。factor'(' tmp ',df $ id == i,value = c(NA,:無效因子水平,NA生成
之前,我使用的是df$tag <- aux[match(df$tag, aux$key),]$value
,它可以正常工作,但是某些重復的df$tags
使match()
產生了許多錯誤的更新行。 我還模擬了子設置,它工作正常。 有人可以為此更新提出解決方案嗎?
UPDATE(最終數據集的外觀如何?):
> df
id tag
1 "valueAA"
2 "valueBB"
3 "valueRR"
4 "valueFF"
(...) (...)
先感謝您。
這會產生您期望的輸出嗎?
df$tag <- aux$value[match(df$tag, aux$key)]
除非您在aux
有重復項, merge()
也會工作。
事實證明,我的數據破壞了所有可用的內置函數,最終為我提供了錯誤的數據集。 然后,我的解決方案(至少是初步解決方案)如下:
rbindlist(a.list, use.names = T)
獲得帶有結果的完整數據框。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.