gpt4 book ai didi

r - 在 dplyr 进程中使用自定义函数

转载 作者:行者123 更新时间:2023-12-04 11:16:25 25 4
gpt4 key购买 nike

我有一个结构为

的数据集
structure(list(ID = structure(1:26, .Label = c("a", "b", "c", 
"d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p",
"q", "r", "s", "t", "u", "v", "w", "x", "y", "z"), class = "factor"),
start.date = structure(c(16583, 16567, 16475, 16507, 16787,
16733, 16614, 16458, 16713, 16689, 16497, 16741, 16527, 16703,
16555, 16612, 16727, 16656, 16461, 16758, 16536, 16482, 16604,
16438, 16489, 16470), class = "Date"), end.date = structure(c(17162,
16973, 16840, 16915, 16870, 17076, 16815, 16901, 16832, 17108,
16866, 16963, 17086, 16859, 16947, 17060, 17063, 16984, 16882,
17087, 16865, 16811, 16871, 16987, 16938, 16910), class = "Date"),
B = c(1.01037117881286, -0.468494103910475, 2.1029305771466,
0.541203301346257, 0.48316300974706, -0.15634066165743, 0.0748809270194454,
0.342283686647221, 1.36029900729214, -0.265980006971409,
-0.200070929944069, -0.778013502221203, -1.95834433790751,
0.981791345936073, 0.806205039682571, 0.211808478113909,
-0.718520854351539, -1.41251704545666, 0.132766895582887,
-1.17600286793503, -1.69832803867181, 0.642400945149099,
-1.64248957354041, 1.80252672879676, 0.318451979178807, 0.59025890995253
), C = c(6L, 12L, 14L, 9L, 4L, 17L, 14L, 7L, 11L, 5L, 17L,
10L, 11L, 5L, 17L, 10L, 9L, 6L, 4L, 5L, 12L, 9L, 9L, 8L,
14L, 10L), D = structure(c(26L, 25L, 24L, 23L, 22L, 21L,
20L, 19L, 18L, 17L, 16L, 15L, 14L, 13L, 12L, 11L, 10L, 9L,
8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L), .Label = c("A", "B", "C",
"D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
"P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"), class = "factor"),
E = c(1L, 0L, 0L, 1L, 2L, 0L, 0L, 0L, 1L, 2L, 0L, 1L, 0L,
0L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L)), .Names = c("ID",
"start.date", "end.date", "B", "C", "D", "E"), row.names = c(NA,
-26L), class = "data.frame")

请注意,这是一个样本数据集,比真实数据集小得多。我写了一个函数

restandard    <- function(x, CID.start, CID.end){
time_length <- difftime(CID.end, CID.start, units = "days")/365.25
replace_x <- x/time_length
}

我想将 restandard 应用于我的数据集,但仅限于数字变量。这基本上意味着我需要使用 mutate_if

我试过没有用:

df %>% mutate_if(~is.numeric(.x), restandard(.x, CID.start = start.date, CID.end = end.date))

有什么办法吗?我的实际问题是我想将其应用于 25 列。谢谢。

最佳答案

你们非常接近;您的 restandard 函数也有错误。根据您的示例数据:

restandard    <- function(x, CID.start, CID.end){
time_length <- difftime(CID.end, CID.start, units = "days") / 365.25
x / as.numeric(time_length)
}

df %>% mutate_if(is.numeric, restandard, CID.start = .$start.date, CID.end = .$end.date)

这给出了这个:

   ID start.date   end.date          B         C D         E
1 a 2015-05-28 2016-12-27 0.6373715 3.784974 Z 0.6308290
2 b 2015-05-12 2016-06-21 -0.4214716 10.795567 Y 0.0000000
3 c 2015-02-09 2016-02-09 2.1043709 14.009589 X 0.0000000
4 d 2015-03-13 2016-04-24 0.4844963 8.056985 W 0.8952206
5 e 2015-12-18 2016-03-10 2.1262083 17.602410 V 8.8012048
6 f 2015-10-25 2016-10-02 -0.1664823 18.102770 U 0.0000000

关于r - 在 dplyr 进程中使用自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51987366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com