The order of the return object from tapply()
is ambiguous,所以我开始担心这段代码:
#d <- data.frame(value = c(1,2,3,5),
# source = c("a","a","b","b"))
d$value <- unlist(tapply(d$value, d$source, function(v) v-v[1]))
这个想法是将value
分成几组,然后移动其元素的每个组,使该组从0开始。
”””什么是一个更好的方式来做这件事?**我有几个想法,但我想不出任何
- 不使用第三方库
- 还是一句俏皮话
- 避免R循环
- 不涉及对原始 Dataframe 进行排序/合并。
2条答案
按热度按时间rvpgvaaj1#
base R中一个鲜为人知的技巧是
split(x, y) <- lapply(split(x, y), f)
范式,所以下面的一行程序满足了您的所有要求:导致:
无论
source
的顺序如何创建于2023-06-06带有reprex v2.0.2
envsm3lx2#
希望
ave
有意义