【发布时间】:2019-05-22 15:19:51
【问题描述】:
我想在我的数据框中添加一列 valueList。按id 分组,它应该显示value 到该点的累积向量。请参见下面的示例:
library(dplyr)
library(purrr)
df <- data.frame(id=c(1,2,3,4,5,6,7,8,1,2,3,3,2,3,5,6),
value=c(58,61,59,49,36,35,39,23,75,73,43,43,13,54,23,12))
df <- df %>%
dplyr::group_by(id) %>%
dplyr::mutate(valueList=purrr::accumulate(value,c)) %>%
ungroup()
但是,当我将它与某些其他值一起使用时,我会根据问题标题收到错误消息。见下文:
df <- data.frame(id=c(56612,32323,96953,93074,15964,38483,11020,91474,62432,70463,89016,29826,85076,46258,18339,89016),
value=c(58,61,59,49,36,35,30,23,75,73,43,0,46,45,43,42))
df <- df %>%
dplyr::group_by(id) %>%
dplyr::mutate(valueList=purrr::accumulate(value,c)) %>%
ungroup()
Error in mutate_impl(.data, dots) :
Column valueList can't be converted from numeric to list
为什么会这样?
【问题讨论】:
-
在第二种情况下,你没有任何重复的'id',即。频率都是1
-
@akrun 几乎的频率都是1; ID 89016 出现两次
-
我认为问题在于创建的不均匀结构(
listvs vector` 当大部分频率计数为 1 时 -
您可以包裹在
list或df %>% dplyr::group_by(id) %>% dplyr::mutate(valueList= list(purrr::accumulate(value,c)))中,或者检查元素是否为list,然后进行不同的处理 -
肯定和上面第一种情况下想要的结果不一样@akrun