我有一个长度未知的data.frame,并为不同的人(id)录制了SkinTemp。我想为每个id创建一个带有时间戳(1 / 32s)的向量。我不知道每个录音有多长。
getFExpr :: IO FProp
getFExpr = do
putStrLn "Enter an FProp expression:"
str <- getLine
case reads str of
(x, ""):_ -> return x
_ -> putStrLn "\nInvalid expression!\n" >> getFExpr
main :: IO ()
main = do
fprop <- getFExpr
putStrLn "Your expression was:"
print fprop
修改
通过调整此答案Numbering rows within groups in a data frame
,我已经研究了如何使用rledf<-data.frame(
SkinTemp=rnorm(65,37,0.5),
id=rep(1:10,c(5,4,10,6,7,8,9,8,4,4)))
编辑2:
我已经意识到这不起作用,因为它从1/32而不是0开始。使用(row_number -1)/ 32的dplyr答案效果更好。
答案 0 :(得分:2)
如果我理解正确,时间戳是1 / 32,2 / 32,3 / 32 ... n / 32,其中n
是每个ID 行的行数
因此,使用dplyr
按ID进行分组应该有效:
编辑:现在使用(row_number() - 1)
从0开始。
library(dplyr)
set.seed(123)
df1 <- data.frame(SkinTemp = rnorm(65, 37, 0.5),
id = rep(1:10, c(5, 4, 10, 6, 7, 8, 9, 8, 4, 4)))
df1 <- df1 %>%
group_by(id) %>%
mutate(ts = (row_number() - 1) / 32) %>%
ungroup()
# A tibble: 65 x 3
SkinTemp id ts
<dbl> <int> <dbl>
1 36.7 1 0
2 36.9 1 0.0312
3 37.8 1 0.0625
4 37.0 1 0.0938
5 37.1 1 0.125
6 37.9 2 0
7 37.2 2 0.0312
8 36.4 2 0.0625
9 36.7 2 0.0938
10 36.8 3 0 # ... with 55 more rows