2017-04-12 63 views
0

我data.frame d看起來像這樣:https://i.stack.imgur.com/f1LJn.jpg的因素添加列data.frame

如果我執行以下命令:d <- d %>% mutate(reporter=ifelse(value_ex>0, report_ctry, partner_ctry))

新創建的變量不包含「DE」和「FR」 ,但10和16.顯然,問題在於變量是數字不是一個因素。告訴R最簡單的方法是什麼?最近創建的變量應該是一個因素而不是數字?

+5

請不要將您的數據作爲圖像提供。我們無法剪切和粘貼該文件來處理您的示例。相反,使用'dput(d)'創建一個數據的文本格式,如果你的數據太大,你可以使用'dput(head(d,15))' – G5W

+2

你還提供str(d)?我的猜測是'report_ctry'和'partner_ctry'是因素,而ifelse正在返回水平而不是字符值「DE」和「FR」 –

回答

1

正如@Jonathan Hill所提到的那樣,條件格式返回的是水平位置而不是字符值。插入as.characterreport_ctrypartner_ctry將返回字符值。

df %>% mutate(reporter=ifelse(value_ex>0, as.character(report_ctry), as.character(partner_ctry))) 
head(df2) 

    report_ctry partner_ctry value_ex reporter 
1   DE   FR 30.26170  DE 
2   DE   FR 20.01426  DE 
3   DE   FR 33.28977  DE 
4   DE   FR 38.37996  DE 
5   DE   FR 0.00000  FR 
6   DE   FR 19.72538  DE 

數據幀生成如下:

df <- data.frame(report_ctry=c(rep("DE", 10), rep("FR", 10)), 
       partner_ctry = c(rep("FR",10), rep("DE", 10)), 
       value_ex = runif(20, min=0, max=50)) 

df$value_ex[5] <- 0 
1

ifelse在基R不在許多情況下保持型。使用dplyr中的if_else,它具有更多的限制,但在大多數情況下都適用。使用的數據由@Adam Quek提供

d <- df %>% 
    mutate(reporter=if_else(value_ex>0, report_ctry, partner_ctry))