我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最簡單的方法是什麼?最近創建的變量應該是一個因素而不是數字?
我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最簡單的方法是什麼?最近創建的變量應該是一個因素而不是數字?
正如@Jonathan Hill所提到的那樣,條件格式返回的是水平位置而不是字符值。插入as.character
爲report_ctry
和partner_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
ifelse
在基R不在許多情況下保持型。使用dplyr中的if_else
,它具有更多的限制,但在大多數情況下都適用。使用的數據由@Adam Quek提供
d <- df %>%
mutate(reporter=if_else(value_ex>0, report_ctry, partner_ctry))
請不要將您的數據作爲圖像提供。我們無法剪切和粘貼該文件來處理您的示例。相反,使用'dput(d)'創建一個數據的文本格式,如果你的數據太大,你可以使用'dput(head(d,15))' – G5W
你還提供str(d)?我的猜測是'report_ctry'和'partner_ctry'是因素,而ifelse正在返回水平而不是字符值「DE」和「FR」 –