尝试在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
是一般的正确方法,也会很棒。
答案 0 :(得分:2)
test %>%
mutate(row = 1:n()) %>%
gather(variable, value, -Species, -row) %>%
group_by(Species, row) %>%
summarize(value = sum(value))
这里我使用Iris数据集作为示例(“Species”是一个字符向量,其他一切都是数字)。这使用gather
来收集您要总结的所有列。它还为每行创建唯一标识符。您可以将结果数据框合并回原始数据,然后按求和列进行过滤。