使用R中的mutate将一列添加到数据框

时间:2019-09-18 13:59:55

标签: r dplyr data-manipulation mutate

我正在使用ISLR数据包中的OJ数据集。我需要添加到数据框的列。一栏是两个数值变量的乘积。第二列是数字变量和分类变量的乘积。

我在R中的mutate包中使用dplyr函数添加了第一列(数字*数字),

require(ISLR)
OJ %>% 
  mutate(`StoreID:PriceCH` = StoreID*PriceCH)

并且我能够成功添加此同伴。但是当我尝试在添加类别*数字列时尝试执行相同操作时,出现了错误。

OJ %>% 
  mutate(`Store7:PriceCH` = Store7*PriceCH)

Warning message:
In Ops.factor(Store7, PriceCH) : ‘*’ not meaningful for factors 

如果我需要添加绝对值*数值的乘积,谁能建议我该怎么办?

我的输出应该是这样的,

enter image description here

谢谢

3 个答案:

答案 0 :(得分:0)

首先对Store7应用单热编码:

OJ <- cbind(OJ, sapply("Yes", function(x) as.integer(x == OJ$Store7)))
names(OJ)[ncol(OJ)] <- "Store7_Yes"

答案 1 :(得分:0)

从概念上讲,在大多数情况下,乘以分类变量并没有多大意义。

如果要这样做,必须将数据转换为数字刻度。请注意,这并不总是那么直接。

这可能是一个起点:

library(tidyverse)

Result <- OJ %>% 
  mutate(`StoreID:PriceCH` = StoreID*PriceCH) %>% 
  mutate(Store7Numeric = as.character(Store7)) #To avoid possible mistakes

Result <- Result %>% 
  mutate(Store7Numeric = ifelse(Store7Numeric == "No", 0, 1)) #Check this

Result <- Result %>% mutate(Store7Numeric = as.numeric(Store7Numeric)) %>% #To numeric
mutate(`Store7:PriceCH` = Store7Numeric*PriceCH) %>% #Your calculation
select(-Store7Numeric) #Remove, if you want. the created numeric variable

答案 2 :(得分:0)

错误消息是由于变量Store7factor(请参见str(OJ)),因此必须使其为numeric

OJ$Store7 <- as.numeric(OJ$Store7)