在同一数据框中,用另一列的值替换NA值

3

我希望将同一数据框中另一列的值替换特定列中的NA值。

数据框1:

Item    From    Price    Discount    NewPrice
 A     Delhi    100        .10         110
 A     Mumbai   200        .10         120
 A     Pune     150         NA          NA
 A     Nagpur   200        .10          NA

我希望用列Price中的值替换NewPrice中的NA。

我参考了这个链接Replace empty values with value from other column in a dataframe,但没有帮助。

我尝试了下面的方法,但没有成功。

df$NewPrice <- ifelse(df$NewPrice == "", df$Price, df$NewPrice)

3
尝试运行df$NewPrice <- ifelse(is.na(df$NewPrice), df$Price, df$NewPrice),看看是否有效。该代码的作用是:如果df$NewPrice为空,则将其替换为df$Price的值;否则保留原来的值。 - Andy Baxter
2
在您的链接帖子中,空值是一个空字符串 "",而在您的情况下是 NA,因此我们需要像安德鲁在上面的评论中展示的那样检查 is.na - zx8754
1
它起作用了,伙计们。感谢@Andrew Baxter和@zx8754。 - Anshul S
2个回答

3

我建议尝试使用标准的子集操作:

#subset the NAs of new price with the ones from price
df$NewPrice[is.na(df$NewPrice)] <- df$Price[is.na(df$NewPrice)]

输出:

df
#  Item   From Price Discount NewPrice
#1    A  Delhi   100      0.1      110
#2    A Mumbai   200      0.1      120
#3    A   Pune   150       NA      150
#4    A Nagpur   200      0.1      200

2

tidyverse解决方案:

df %>% mutate(NewPrice=coalesce(NewPrice, Price))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接