我需要按列字符串前缀分组更长的时间。下面的玩具示例有两个组“A”和“B”,但我需要一个针对任意数量的前缀组的通用 tidyverse 解决方案。
#toy df
set.seed(1)
df <- data.table(
date = rep(seq(as.Date("2020-01-01"),as.Date("2020-01-05"),by="day"),each=6),
k = rep(c("A.mean","A.median","A.min","B.mean","B.median","B.min"),5),
v = runif(30,0,50)
) %>%
pivot_wider(names_from = k, values_from = v)
df %>% head
date A.mean A.median A.min B.mean B.median B.min
<date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2020-01-01 13.3 18.6 28.6 45.4 10.1 44.9
2 2020-01-02 47.2 33.0 31.5 3.09 10.3 8.83
3 2020-01-03 34.4 19.2 38.5 24.9 35.9 49.6
4 2020-01-04 19.0 38.9 46.7 10.6 32.6 6.28
5 2020-01-05 13.4 19.3 0.670 …Run Code Online (Sandbox Code Playgroud) 我想为这个多组图强制渲染一条更平滑的线,即使在一个组只有一个或两个值的情况下也是如此。见下文:
library(ggplot2)
set.seed(1234)
df <- data.frame(group = factor(c(rep("A",3),rep("B",2),"C")), x = c(1,2,3,1,2,2), value = runif(6))
ggplot(df,aes(x=x,y=value,group=group,color=group))+
geom_point(size=2)+
geom_line(stat="smooth",method = "loess",size = 2, alpha = 0.3)
Run Code Online (Sandbox Code Playgroud)
这是我想看到的输出:
我需要从矢量中减去一个数字,使其从元素中被连续地减去.例如,考虑向量a = c(8, 4).如果我想从这个向量中连续减去9,我首先从第一个向量元素中减去9,即第一个元素为0,提示为1,然后从第二个元素中减去.对于第二个向量元素,留下4-1 = 3.
我可以用一堆不雅的if-else语句来做到这一点.肯定有更好的办法.显示示例会更容易:
我假设串行减法函数叫做serialSub.
a = c(8,4)
serialSub(a,4)
> [1] 4 4
serialSub(a,8)
> [1] 0 4
serialSub(a,9)
> [1] 0 3
serialSub(a,13)
> [1] 0 0
serialSub(a,0)
> [1] 8 4
Run Code Online (Sandbox Code Playgroud) 我是data.table的初学者.任何人都可以向我解释为什么我不能得到预期的结果shift()?(我得到的结果是"领先"或"滞后")
set.seed(123)
x <- data.table(a = sample(1:10,10,replace = F))
x <- x[order(a)][, a1 := shift(a,1,"lead")]
x
a a1
1: 1 NA
2: 2 1
3: 3 2
4: 4 3
5: 5 4
6: 6 5
7: 7 6
8: 8 7
9: 9 8
10: 10 9
Run Code Online (Sandbox Code Playgroud)
这是我期待的结果:
data.table(a = 1:10, a1 = c(2:10,NA))
a a1
1: 1 2
2: 2 3
3: 3 4
4: 4 5
5: 5 6
6: 6 7
7: 7 8 …Run Code Online (Sandbox Code Playgroud)