首页 > 解决方案 > 在R data.frame中,如何根据当前已有的变量添加新的变量

问题描述

有一个数据框'ori_data'(作为图像'灰色区域'),如何添加两个变量'final_price/final_price_from'?

1.'final_price'从'price1:price4'中检索第一个出现的数字

2.'final_price_from'是'final_price'来自哪个变量'price1:price4'的源标签

ori_data <- data.frame(category=c("a","b","c","d","e","f","g","h","i"), 
           price1=c(1,9,0,0,0,0,6,9,0),
           price2=c(3,0,2,0,6,0,0,9,0), 
           price3=c(0,2,0,3,0,5,4,0,0), 
           price4=c(0,0,3,0,5,7,0,0,0))

在此处输入图像描述

标签: rdataframe

解决方案


你可以试试

library(dplyr)
library(reshape2)

final_price <- ori_data %>%
  melt(id.vars = "category") %>%
  group_by(category) %>% arrange(category) %>%
  slice(which.max(value > 0))
names(final_price)[2:3] <- c("final_price_from", "final_price")
ori_data %>%
  left_join(final_price, by = "category") %>%
  mutate(final_price = ifelse(final_price>0, final_price, "none"))

  category price1 price2 price3 price4 final_price_from final_price
1        a      1      3      0      0           price1           1
2        b      9      0      2      0           price1           9
3        c      0      2      0      3           price2           2
4        d      0      0      3      0           price3           3
5        e      0      6      0      5           price2           6
6        f      0      0      5      7           price3           5
7        g      6      0      4      0           price1           6
8        h      9      9      0      0           price1           9
9        i      0      0      0      0           price1        none

推荐阅读