【发布时间】:2018-09-17 01:36:03
【问题描述】:
我正在尝试使用rbind 组合两个数据帧。下面是两个dfs
ab1
structure(list(Product = c("Black Menthol", "Gold ", "Green ",
"Red "), `Apr 2017` = structure(c(`Black Menthol` = 2L, `Gold ` = 3L,
`Green ` = 1L, `Red ` = 4L), .Label = c("0", "0.02", "0.07",
"0.09", "Apr 2017"), class = "factor"), `May 2017` = structure(c(`Black Menthol` = 2L,
`Gold ` = 3L, `Green ` = 1L, `Red ` = 4L), .Label = c("0", "0.02",
"0.07", "0.08", "May 2017"), class = "factor"), `Jun 2017` = structure(c(`Black Menthol` = 2L,
`Gold ` = 4L, `Green ` = 1L, `Red ` = 3L), .Label = c("0", "0.02",
"0.07", "0.08", "Jun 2017"), class = "factor"), `Jul 2017` = structure(c(`Black Menthol` = 2L,
`Gold ` = 3L, `Green ` = 1L, `Red ` = 4L), .Label = c("0", "0.02",
"0.07", "0.09", "Jul 2017"), class = "factor"), `Aug 2017` = structure(c(`Black Menthol` = 2L,
`Gold ` = 3L, `Green ` = 1L, `Red ` = 4L), .Label = c("0", "0.02",
"0.07", "0.09", "Aug 2017"), class = "factor"), `Sep 2017` = structure(c(`Black Menthol` = 2L,
`Gold ` = 3L, `Green ` = 1L, `Red ` = 4L), .Label = c("0", "0.02",
"0.07", "0.09", "Sep 2017"), class = "factor"), `Oct 2017` = structure(c(`Black Menthol` = 2L,
`Gold ` = 3L, `Green ` = 1L, `Red ` = 4L), .Label = c("0", "0.02",
"0.07", "0.08", "Oct 2017"), class = "factor"), `Nov 2017` = structure(c(`Black Menthol` = 2L,
`Gold ` = 3L, `Green ` = 1L, `Red ` = 4L), .Label = c("0", "0.02",
"0.07", "0.09", "Nov 2017"), class = "factor"), `Dec 2017` = structure(c(`Black Menthol` = 2L,
`Gold ` = 3L, `Green ` = 1L, `Red ` = 4L), .Label = c("0", "0.03",
"0.07", "0.08", "Dec 2017"), class = "factor"), `Jan 2018` = structure(c(`Black Menthol` = 2L,
`Gold ` = 3L, `Green ` = 1L, `Red ` = 3L), .Label = c("0", "0.03",
"0.06", "Jan 2018"), class = "factor")), row.names = c(NA, -4L
), class = "data.frame")
ab2
structure(list(Product = c("Black Menthol", "Black Non-Menthol",
"Green ", "Red "), `Apr 2017` = structure(c(`Black Menthol` = 1L,
`Black Non-Menthol` = 3L, `Green ` = 2L, `Red ` = 4L), .Label = c("0.02",
"0.07", "0.17", "0.23", "Apr 2017"), class = "factor"), `May 2017` = structure(c(`Black Menthol` = 1L,
`Black Non-Menthol` = 3L, `Green ` = 2L, `Red ` = 4L), .Label = c("0.02",
"0.06", "0.17", "0.24", "May 2017"), class = "factor"), `Jun 2017` = structure(c(`Black Menthol` = 1L,
`Black Non-Menthol` = 3L, `Green ` = 2L, `Red ` = 4L), .Label = c("0.02",
"0.07", "0.18", "0.25", "Jun 2017"), class = "factor"), `Jul 2017` = structure(c(`Black Menthol` = 1L,
`Black Non-Menthol` = 3L, `Green ` = 2L, `Red ` = 4L), .Label = c("0.02",
"0.06", "0.17", "0.24", "Jul 2017"), class = "factor"), `Aug 2017` = structure(c(`Black Menthol` = 1L,
`Black Non-Menthol` = 3L, `Green ` = 2L, `Red ` = 4L), .Label = c("0.02",
"0.06", "0.16", "0.23", "Aug 2017"), class = "factor"), `Sep 2017` = structure(c(`Black Menthol` = 1L,
`Black Non-Menthol` = 3L, `Green ` = 2L, `Red ` = 4L), .Label = c("0.02",
"0.06", "0.16", "0.23", "Sep 2017"), class = "factor"), `Oct 2017` = structure(c(`Black Menthol` = 1L,
`Black Non-Menthol` = 3L, `Green ` = 2L, `Red ` = 4L), .Label = c("0.02",
"0.07", "0.14", "0.22", "Oct 2017"), class = "factor"), `Nov 2017` = structure(c(`Black Menthol` = 1L,
`Black Non-Menthol` = 3L, `Green ` = 2L, `Red ` = 4L), .Label = c("0.02",
"0.08", "0.15", "0.22", "Nov 2017"), class = "factor"), `Dec 2017` = structure(c(`Black Menthol` = 1L,
`Black Non-Menthol` = 3L, `Green ` = 2L, `Red ` = 4L), .Label = c("0.03",
"0.09", "0.16", "0.20", "Dec 2017"), class = "factor"), `Jan 2018` = structure(c(`Black Menthol` = 1L,
`Black Non-Menthol` = 3L, `Green ` = 2L, `Red ` = 4L), .Label = c("0.03",
"0.08", "0.16", "0.22", "Jan 2018"), class = "factor")), row.names = c(NA,
-4L), class = "data.frame")
下面是我用来组合它们的代码:
library(shiny)
library(dplyr)
ab3 <- reactive({rbind.data.frame(ab1,ab2)})
ab4<- reactive({ ab3 %>% group_by(`Product`) %>%summarize_all(funs(sum))})
当我这样做时,我收到以下错误:Evaluation error: ‘sum’ not meaningful for factors
我想要得到的输出是:
Product Apr.2017 May.2017 Jun.2017 Jul.2017 Aug.2017 Sep.2017 Oct.2017
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 Black … 0.04 0.04 0.04 0.04 0.04 0.04 0.04
#2 Black … 0.17 0.17 0.18 0.17 0.16 0.16 0.14
#3 Gold 0.07 0.07 0.08 0.07 0.07 0.07 0.07
#4 Green 0.07 0.06 0.07 0.06 0.06 0.06 0.07
#5 Red 0.32 0.32 0.32 0.330 0.32 0.32 0.3
【问题讨论】:
-
rbind不是问题所在。这是您尝试在ab4 <- ...步骤中对factor(分类)变量执行sum()。相当于"apple" + "orange"。这是因为您的第一个"Product"列不是数字列。 -
所以在 rbind 无法正常工作后,我确实尝试将所有因子转换为数字:
ab3_convert<- # data.frame(lapply(ab3, function(x) as.numeric(as.character(x))), # check.names=F, row.names = rownames(ab3)) -
请使用
ab3(),因为这是一个函数