小编Cet*_*ttt的帖子

tidyverse内的累积聚合

说我有一个 tibble(或data.table)由两列组成:

a <- tibble(id = rep(c("A", "B"), each = 6), val = c(1, 0, 0, 1 ,0,1,0,0,0,1,1,1))
Run Code Online (Sandbox Code Playgroud)

此外,我有一个函数调用myfun,它将任意长度的数字向量作为输入并返回一个数字.例如,您可以将其myfun视为标准偏差.

现在我想为我的tibble(称为结果)创建第三列,其中包含myfun应用于val累积的输出和关于id的分组.例如,结果的第一个条目应该包含mfun(val[1]).第二个条目应包含myfun(val[1:2]),依此类推.我想实现myfun的累积版本.

当然,在tidyverse使用循环之外还有很多简单的解决方案.但我会对框架内tidyversedata.table框架内的解决方案感兴趣.

任何帮助表示赞赏.

r dataframe dplyr purrr tidyverse

1
推荐指数
1
解决办法
429
查看次数

将 ntile() 与 group_by() 与 dplyr 一起使用

我想计算 data.frame 中的组的五分位数,例如:

df <- data.frame(x=1:100, y=c(rep("A", 50), rep("B", 50)))
Run Code Online (Sandbox Code Playgroud)

使用ntile()函数和group_byfrom dplyr,我想我可以得到分组的五分位数,比如这里。但是,从表中可以看出,五分位数是针对整个数据集计算的。我希望得到的结果,其中有10每个五分之一的AB在这种情况下。

df$z <- df %>% group_by(y) %>% mutate(z = ntile(x, 5)) %>% pull(z)

table(df$y, df$z)

     1  2  3  4  5
  A 20 20 10  0  0
  B  0  0 10 20 20
Run Code Online (Sandbox Code Playgroud)

group-by r percentile dataframe dplyr

1
推荐指数
1
解决办法
1658
查看次数

使用 nmle 包的 R 中的多级模型

我正在使用该nlme包来学习多级模型,并在发生这种情况时遵循教科书“使用 R 发现统计”中的示例。

混合型号代码

该数据集是 Honeymoon Period.dat,也可以在其配套网站下下载。

数据集 - 多级模型

require(nlme)
require(reshape2)
satisfactionData = read.delim("Honeymoon Period.dat",  header = TRUE)

restructuredData<-melt(satisfactionData, id = c("Person", "Gender"), measured = c("Satisfaction_Base", "Satisfaction_6_Months", "Satisfaction_12_Months", "Satisfaction_18_Months"))
names(restructuredData)<-c("Person", "Gender", "Time", "Life_Satisfaction")


#print(restructuredData)
#restructuredData.sorted<-restructuredData[order(Person),]

intercept <-gls(Life_Satisfaction~1, data = restructuredData, method = "ML", na.action = na.exclude)
randomIntercept <-lme(Life_Satisfaction ~1, data = restructuredData, random = ~1|Person, method = "ML",  na.action = na.exclude, control = list(opt="optim"))
anova(intercept, randomIntercept)

timeRI<-update(randomIntercept, .~. + Time)
timeRS<-update(timeRI, random = ~Time|Person)
ARModel<-update(timeRS, correlation …
Run Code Online (Sandbox Code Playgroud)

statistics r nlme

0
推荐指数
1
解决办法
2072
查看次数

如何使您的排名值在 R data.table 中显示整数(不带小数)

我必须对此数据集中的几个变量排序的数据集进行排名,并按其中的另一个变量分组。当我在 data.table 上使用排名方法时,排名值是小数。我需要它们是没有小数部分的整数。

波纹管,我正在提供我需要的摘要。我正在从本网站的另一个问题中复制其他人的示例(也与排名方法有关)。我发现这个问题的答案很有用,但它仍然没有提供使排名结果成为没有小数的整数的方法。这就是为什么我在这里复制它并将其作为这个问题的起点(因为不允许在一个答案下提出不同的问题)。

我需要根据几个变量进行排名,按一个(或几个变量)分组,然后得到一个没有小数的整数排名。

这是其他人的例子:

他创建了数据表:

library(data.table)

t1 <- data.table (id = c('11', '11', '11', '22','22',
                         '88', '99','44','44', '55'),
                          date = as.Date(c("01-01-2016", 
                                "01-02-2016", 
                                "01-02-2016",
                                "02-01-2016", 
                                "02-02-2016"),
                              format = "%m-%d-%Y"))


setkey(dt1, date)
setkey(dt1, id)
dt1
    id       date

1: 11 2016-01-01

2: 11 2016-01-02

3: 11 2016-01-02

4: 22 2016-02-01

5: 22 2016-02-02

6: 44 2016-01-02

7: 44 2016-02-01

8: 55 2016-02-02

9: 88 2016-01-01

10: 99 2016-01-02
Run Code Online (Sandbox Code Playgroud)

在这里,他根据变量进行排名date并按以下分组id

dt1[, rank := frank(date), by = list(id)]
dt1 …
Run Code Online (Sandbox Code Playgroud)

r ranking data.table

0
推荐指数
1
解决办法
779
查看次数

R `scales::comma` 有效但 `scales::comma()` 无效 - 为什么?

当我在包中使用函数时,我通常可以将其写成形式function()function不带括号。似乎不是这种情况scales::comma。为什么第 7 行在下面有效,而第 8 行却没有。

library(tidyverse)
mtcars %>% 
  count(cyl) %>% 
  ungroup() %>% 
  mutate(n = n * 1000) %>% 
  ggplot(aes(cyl, n)) + 
  scale_y_continuous(labels = scales::comma) +  # line 7
  # scale_y_continuous(labels = scales::comma()) +  # line 8
  geom_line()
Run Code Online (Sandbox Code Playgroud)

第 8 行错误

Error in number(x = x, accuracy = accuracy, scale = scale, prefix = prefix,  : 
  argument "x" is missing, with no default
Run Code Online (Sandbox Code Playgroud)

r scale ggplot2

0
推荐指数
1
解决办法
1291
查看次数

如何四舍五入到R

我想在df中将数字四舍五入,但25、50或75应该是100,125应该是100,150或175应该是200。220应该是200,依此类推。

换句话说,如果数字小于100,则应四舍五入为100,大于100的数字应四舍五入,如果小于50,则取整为最接近的整数。

可以说我的数据框是

    df <- data.frame(replicate(1,sample(0:999,100,rep=TRUE)))
colnames(df) <- c("data")
Run Code Online (Sandbox Code Playgroud)

我尝试了这个:

result <- df %>% 
  mutate(
    data = round(if_else(data <= 100, 100, as.numeric(data)), 100)
  )
Run Code Online (Sandbox Code Playgroud)

但是只有第一部分有效,如果数量小于100,则将其设为100。我在做什么错?

r rounding dataframe dplyr

0
推荐指数
1
解决办法
72
查看次数

两年值之间的比率

我有一个带有值列和相应年份的数据框。我想创建一个额外的列,其中应包含以5年为间隔的年份的价值比率,向后倒退。例如 如果年份是2000,则'newval'列应具有2000和1995年的值比率。我的数据框如下所示。可能缺少年份,并且“值”和“年份”列中都没有数据。

df2 = data.frame(code = c("AFG", "AGO", "ALB", "AND", "ARB", "ARE", "ARG", "ARM", "ASM", "ATG", "AUS", "AUT","AUT"),
            val = c(123, 42, 23, 5, 42, 4, 23, 25, 42, 23, NA, 5563,56), 
            Year = c(1990, 1991, 1992, 1993, 1991, 1995, 1996, 1997, 1991, 1992, 2000, 2001,2002))
Run Code Online (Sandbox Code Playgroud)

最终数据集应如下所示

 df2 = data.frame(code = c("AFG", "AGO", "ALB", "AND", "ARB", "ARE", "ARG", "ARM", "ASM", "ATG", "AUS", "AUT","AUT"),
             val= c(123, 42, 23, 5, 42, 4, 23, 25, 42, 23, NA, 5563,56),
             Year = c(1990, 1991, …
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr data.table tidyr

0
推荐指数
1
解决办法
57
查看次数