亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

基于查找表替換數據幀中的值

基于查找表替換數據幀中的值

鳳凰求蠱 2019-07-20 14:27:51
基于查找表替換數據幀中的值在dataframe中,我在替換值時遇到了一些問題。我想用一個單獨的表格來替換值。下面是我想要做的事情的一個例子。我有一張桌子,每一行都是顧客,每一欄都是他們買來的動物。讓我們把這個叫做dataframetable.> table#       P1     P2     P3# 1    cat lizard parrot# 2 lizard parrot    cat# 3 parrot    cat lizard我還有一個表,我將引用它,名為lookUp.> lookUp#      pet   class# 1    cat  mammal# 2 lizard reptile# 3 parrot    bird我要做的是創建一個名為new中的所有值都由一個函數替換table帶著class列lookUp..我自己用一個lapply函數,但我收到了以下警告。new <- as.data.frame(lapply(table, function(x) {   gsub('.*', lookUp[match(x, lookUp$pet) ,2], x)}), stringsAsFactors = FALSE)Warning messages:1: In gsub(".*", lookUp[match(x, lookUp$pet), 2], x) :   argument 'replacement' has length > 1 and only the first element will be used2: In gsub(".*", lookUp[match(x, lookUp$pet), 2], x) :   argument 'replacement' has length > 1 and only the first element will be used3: In gsub(".*", lookUp[match(x, lookUp$pet), 2], x) :   argument 'replacement' has length > 1 and only the first element will be used對如何使這件事奏效有什么想法嗎?
查看完整描述

3 回答

?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

你在問題中貼出了一個不錯的方法。這里有一個微笑的方法:


new <- df? # create a copy of df

# using lapply, loop over columns and match values to the look up table. store in "new".

new[] <- lapply(df, function(x) look$class[match(x, look$pet)])

另一種更快的辦法是:


new <- df

new[] <- look$class[match(unlist(df), look$pet)]

請注意,我使用空括號([])在這兩種情況下,保持new按原樣(數據幀)。

查看完整回答
反對 回復 2019-07-20
  • 3 回答
  • 0 關注
  • 513 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號