dplyr中的rowSum问题 - 'x'必须是数字

时间:2017-11-24 13:44:03

标签: r dplyr tibble rowsum

尝试在dplyr中创建rowSums时遇到了问题。

通过

分组数据后
data <- data %>%
  group_by(location, category) %>% 
  summarise(amount = sum(amount)) %>%
  spread(key = "category", value = "amount", fill = 0)

输出结果为:

# A tibble: 4,211 x 140
# Groups:   location [4,211]
                       location    art      books     cars 
 *                        <chr>    <dbl>    <dbl>     <dbl>                         
 1                 New York, NY    0         10       0                    
 2              Los Angeles, CA    12        0        2           
 ...

然后尝试使rowSum不起作用:

data %>% mutate(sum=rowSums(.))

Error in mutate_impl(.data, dots) : 
  Evaluation error: 'x' must be numeric.

> class(ks)
[1] "grouped_df" "tbl_df"     "tbl"        "data.frame"

我试图像下面那样更改枢轴,但它也没有帮助:

data <- data %>%
  group_by(location, category) %>% 
  summarise(amount = as.numeric(sum(amount))) %>%        # Changed
  spread(key = "category", value = "amount", fill = 0)

str(data.frame(data))

'data.frame':   4211 obs. of  140 variables:
 $ location                    : chr  "New York, NY" "Los Angeles, CA" ... ...
 $ art                         : num  0 0 0 0 0 0 0 0 0 0 ...
 $ books                       : num  0 0 0 0 0 0 0 0 0 0 ...
 $ cars                        : num  0 0 0 0 0 0 0 0 0 0 ...
 ...     

在这里得到一些帮助会很棒。

计算每行的总和之后,我需要过滤具有rowum&lt;的行的位置。 1000.如果知道如何做到这一点并且dplyr是一般的正确方法,也会很棒。

1 个答案:

答案 0 :(得分:2)

test %>% 
    mutate(row = 1:n()) %>% 
    gather(variable, value, -Species, -row) %>% 
    group_by(Species, row) %>% 
    summarize(value = sum(value))

这里我使用Iris数据集作为示例(“Species”是一个字符向量,其他一切都是数字)。这使用gather来收集您要总结的所有列。它还为每行创建唯一标识符。您可以将结果数据框合并回原始数据,然后按求和列进行过滤。