嗨,大家好,我有这个问题,我想用起始值来表示一行观察到的最后一个值,并将其除以具有值的单元格数,例如:
Day1 day2 day3 day4 day5
3 2 1 1 1
3 4 NA NA NA
5 6 7 NA NA
7 8 9 10 12对于:第一个值是(1-3)/5第二值是(4-3)/2第三值是(7-5)/3第四值是(12-7)/5
并将所有值保存在新列中。
发布于 2022-06-23 14:39:52
1)定义stat函数,然后按行应用它。
library(dplyr)
stat <- function(x) (tail(x, 1) - head(x, 1)) / length(x)
DF %>%
rowwise %>%
mutate(stat = stat(na.omit(c_across()))) %>%
ungroup给予:
# A tibble: 4 x 6
Day1 day2 day3 day4 day5 stat
<int> <int> <int> <int> <int> <dbl>
1 3 2 1 1 1 -0.4
2 3 4 NA NA NA 0.5
3 5 6 7 NA NA 0.667
4 7 8 9 10 12 1 2) Base 或从上面使用基本R和stat:
cbind(DF, stat = apply(DF, 1, function(x) stat(na.omit(x))))发布于 2022-06-23 14:51:23
一种方法是识别每行中最大的非NA索引。
使用申请:
dtf = read.table(header = TRUE,
text = ' Day1 day2 day3 day4 day5
3 2 1 1 1
3 4 NA NA NA
5 6 7 NA NA
7 8 9 10 12')
dtf$ratio = apply(dtf, 1, function(x){ind_last = max(which(!is.na(x)
(x[ind_last] - x[1]) / ind_last}) 它导致:
Day1 day2 day3 day4 day5 ratio
1 3 2 1 1 1 -0.4000000
2 3 4 NA NA NA 0.5000000
3 5 6 7 NA NA 0.6666667
4 7 8 9 10 12 1.0000000https://stackoverflow.com/questions/72731929
复制相似问题