我试图计算R中的距离,但在我的数据框中,第一个变量(列)是一个ID,例如我有这个:
rownames ID Amount1 1 0015 15 2 9812 25 3 1672 89
我想要这样的东西:
rownames Amount1 0015 15 9812 25 1672 89
我正在处理一些来自动物治疗的信息R.首先,我想描述一下我的信息结构(最后我会添加dput()版本).我的数据是DF,它看起来像这样:
Treatment_ID Start_Date Valid
1 0031 2011-05-01 2011-05-30
2 0031 2011-05-01 2011-06-30
3 0045 2012-02-01 2012-03-01
4 0057 2012-04-01 2012-04-30
5 0057 2012-04-01 2012-05-30
6 0098 2012-10-01 2012-10-30
Run Code Online (Sandbox Code Playgroud)
它有56行和3个变量Treatment_ID(5种治疗方法),Start_Date(治疗开始日期)和Valid(治疗的最终日期).例如,Treatment_ID 0031有两个观察结果,因为它始于2011年5月,并于2011年6月结束.然后0045在2012年2月开始新的治疗并于2012年3月结束(仅一次观察).相同的结构适用于内部的所有组DF.我需要使用某些条件计算每次治疗之间和每次治疗之后的月份差异.我会用前两种方法来证明这一点:
Treatment_ID Start_Date Valid
1 0031 2011-05-01 2011-05-30
2 0031 2011-05-01 2011-06-30
3 0045 2012-02-01 2012-03-01
4 0057 2012-04-01 2012-04-30
Run Code Online (Sandbox Code Playgroud)
对于这个例子,我有两行用于第一次处理Treatment_Id变量相等的行.当发生这种情况时,Valid必须计算变量的月份差异.当出现新治疗时Start_Date,Valid必须计算两者之间的差异.请注意,当治疗有多个观察时,通过使用Valid变量对该组中的观察结果进行差异,但是当Treatment_Id变化时,必须通过使用 …
I am working on RMarkdown to generate a report that includes an appendix after references. I have written the appendix on a different RMarkdown file and adapted my principal file to compile it. This is the code for my principal Rmd file that generates report:
---
bibliography: bb.bib
fontsize: 11pt
nocite: '@*'
output:
pdf_document:
includes:
after_body: Demo2.Rmd
keep_tex: yes
link-citations: true
---
\newpage
\section{Testing}\label{sec1}
```{r}
summary(cars)
```
\section{Demo}
This was done using @shiina and we will use some info from …Run Code Online (Sandbox Code Playgroud) ggplot2我正在使用一个小 dataframe进行绘图df。我的数据框有一个组变量和Letter两个数值变量(我在本文末尾包含了的版本)。XYdput()df
当我尝试对齐顶部条形的标签时,出现了我的主要问题。由于我的设计,一个变量需要显示在右侧,另一个变量需要显示在左侧。这就是为什么我将一些值乘以-1。这是我的绘图的代码和输出:
library(tidyverse)
library(ggplot2)
#Plot
df %>%
pivot_longer(-c(Letter)) %>%
mutate(value=ifelse(name=='X',value*-1,value)) %>%
ggplot(aes(x=Letter,y=value,fill=name))+
geom_bar(stat = 'identity',color='black',alpha=0.7)+
geom_text(aes(label=format(abs(value),big.mark = '.')),
size=3,fontface='bold')+
scale_x_discrete(limits = rev(unique(df$Letter)))+
scale_y_continuous(labels = function(x) scales::comma(abs(x)),
breaks = scales::pretty_breaks(10))+
coord_flip()
Run Code Online (Sandbox Code Playgroud)
和输出:
正如你所看到的,情节很好,但问题出在标签上。在左侧和右侧,标签的一部分位于条形内部,另一部分位于条形外部。我想在每个栏顶部的两侧都有标签。我不知道这是否可能,因为有些值是正值,有些是负值。我尝试添加hjust,geom_text()这只适用于左侧:
#Plot 1
df %>%
pivot_longer(-c(Letter)) %>%
mutate(value=ifelse(name=='X',value*-1,value)) %>%
ggplot(aes(x=Letter,y=value,fill=name))+
geom_bar(stat = 'identity',color='black',alpha=0.7)+
geom_text(aes(label=format(abs(value),big.mark = '.')),
size=3,fontface='bold',
hjust=1)+
scale_x_discrete(limits = rev(unique(df$Letter)))+
scale_y_continuous(labels = function(x) scales::comma(abs(x)),
breaks = scales::pretty_breaks(10))+
coord_flip()
Run Code Online (Sandbox Code Playgroud)
输出:
我想找到一种方法,使两侧的标签与各自栏的顶部对齐。
非常感谢您的帮助。我的数据dput()如下:
#Data …Run Code Online (Sandbox Code Playgroud) 我对table()R中的函数有疑问。我想添加一个额外的列,以显示的计数百分比table()。我有一个像这样的数据框:
delta=data.frame(x1=c("x001","x001","x002","x002","x001","x001","x002"),x2=c(1,2,1,1,1,1,1))
Run Code Online (Sandbox Code Playgroud)
当我table()为这个数据帧计算时,我得到了:
table(delta$x1,delta$x2)
1 2
x001 3 1
x002 3 0
Run Code Online (Sandbox Code Playgroud)
可以在此表中添加百分比,或者R中有任何函数或程序包可以计算如下内容:
1 2 Number Percentage
x001 3 1 4 0.5714286
x002 3 0 3 0.4285714
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助。
我在使用如下数据框创建数据透视表时遇到问题:
c1 c2 c3 c4
E 5.76 201 A la vista
E 47530.71 201 A la vista
E 82.85 201 A la vista
L 11376.55 201 A la vista
E 6683.37 203 A la vista
E 66726.52 203 A la vista
E 2.39 203 A la vista
E 79066.07 202 Montoxv_a60d
E 14715.71 202 Montoxv_a60d
E 22661.78 202 Montoxv_a60d
L 81146.25 124 Montoxv_a90d
L 471730.2 124 Montoxv_a186d
E 667812.84 124 Montoxv_a186d
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道如何在R中创建一个包含四个变量的数据透视表或汇总表,考虑行中的最终表,级别c1和 c3和列的级别c4.c2对于行中考虑的每个级别,变量的值必须通过总和进行聚合.我想得到这样的东西: …
给出如下的data.frame
ID Card.Type Mount
001 Basic 500
002 Basic 400
003 Basic 700
004 Basic 1000
005 Silver 1200
006 Silver 1300
007 Basic 800
008 Silver 1400
009 Gold 2500
0010 Gold 5000
0012 Gold 7000
0013 Gold 15000
Run Code Online (Sandbox Code Playgroud)
我想创建一个列联表,其中的值Mount根据向量分类为间隔B=c(0,100,500,1000,2000,3000,4000,5000).结果将是这样的表:
Card.Type 0-100 101-500 501-1000 1001-2000 2001-3000 3001-4000 4001-5000 >5000
Basic 0 2 2 0 0 0 0 0
Silver 0 0 0 3 0 0 0 0
Gold 0 0 0 0 1 0 1 …Run Code Online (Sandbox Code Playgroud) 我正在创建一个动画,gganimate但我需要在标题上显示日期。我的数据df(dput()包含在最后)很小,当我不显示带有日期的标题但我需要包含它时,动画效果很好。这是我使用的代码:
library(tidyverse)
library(ggplot2)
library(gganimate)
#Code for plot
df %>%
pivot_longer(-c(Date)) %>%
ggplot(aes(x=Date,y=value,color=name,
group=name))+
geom_point(size=2)+
geom_line(size=1)+
scale_y_continuous(labels = scales::comma)+
geom_segment(aes(xend = Date, yend = value), linetype = 2, colour = 'grey') +
geom_text(aes(x = Date, label = sprintf("%5.0f", value),group=name), hjust = 0,show.legend = F,fontface='bold',color='black') +
theme(axis.text.x = element_text(face = 'bold',color='black'),
axis.text.y = element_text(face = 'bold',color='black'),
legend.text = element_text(face = 'bold',color='black'),
axis.title = element_text(face = 'bold',color='black'),
legend.position = 'bottom',
legend.title = element_text(face = 'bold',color='black'),
legend.justification = …Run Code Online (Sandbox Code Playgroud) 我正在使用大量的值列表R.我需要将一些函数应用于列表的每个元素.我使用的列表i1是由下一个代码生成的:
i1=list(0)
i1[1:120000]=runif(120000,min = 10000,max = 100000)
Run Code Online (Sandbox Code Playgroud)
在i1我必须应用一些函数,以便使用列表中的每个值作为输入来获取新的数据帧.函数是下一个:使用某些条件使用f_1每个值作为输入计算新值i1.在这个函数中,我使用了一些条件来获得值.功能是下一个:
f_1=function(x)
{
y=ifelse((x/18)>20,x-(x/18),ifelse(x>20,x-20,ifelse(x==0,0,x)))
return(y)
}
Run Code Online (Sandbox Code Playgroud)
第二个功能是f_2.此函数用作输入f_1,它由一个for有160次迭代的结构组成.在此函数中,将创建一个空向量.然后,通过应用f_1函数来增长矢量.最终结果f_2是一个数据框,其中包含for结构中生成的所有元素.功能是下一个:
f_2=function(v)
{
x=c()
y=v
x[1]=y
for(i in 2:160)
{
x[i]=f_1(x[i-1])
}
x=x[!duplicated(x)]
x=c(x,0)
z=as.data.frame(t(abs(diff(x))))
return(z)
}
Run Code Online (Sandbox Code Playgroud)
最后,要同时适用f_1和f_2对i1我用的是包plyr,以功能应用到列表中.我为该活动构建了这个函数:
compute=function(x)
{
y=f_2(x)
return(y)
}
Run Code Online (Sandbox Code Playgroud)
通过使用compute我可以为列表中的所有元素应用函数.我用这个代码:
L2=llply(i1,compute)
Run Code Online (Sandbox Code Playgroud)
一切正常,但需要很长时间才能产生最终结果:
system.time(llply(i1,compute))
user system elapsed
436.71 0.92 447.70
Run Code Online (Sandbox Code Playgroud)
我认为该过程太慢的原因在函数中有一个基础,f_2 …
大家好,我正在尝试解决 R 中关于日期的一个小问题。我有下一个日期对象名为mydate:
mydate=seq(as.Date("2009-01-01"),as.Date("2013-12-01"), by="1 month")
mydate
[1] "2009-01-01" "2009-02-01" "2009-03-01" "2009-04-01" "2009-05-01" "2009-06-01"
[7] "2009-07-01" "2009-08-01" "2009-09-01" "2009-10-01" "2009-11-01" "2009-12-01"
[13] "2010-01-01" "2010-02-01" "2010-03-01" "2010-04-01" "2010-05-01" "2010-06-01"
[19] "2010-07-01" "2010-08-01" "2010-09-01" "2010-10-01" "2010-11-01" "2010-12-01"
[25] "2011-01-01" "2011-02-01" "2011-03-01" "2011-04-01" "2011-05-01" "2011-06-01"
[31] "2011-07-01" "2011-08-01" "2011-09-01" "2011-10-01" "2011-11-01" "2011-12-01"
[37] "2012-01-01" "2012-02-01" "2012-03-01" "2012-04-01" "2012-05-01" "2012-06-01"
[43] "2012-07-01" "2012-08-01" "2012-09-01" "2012-10-01" "2012-11-01" "2012-12-01"
[49] "2013-01-01" "2013-02-01" "2013-03-01" "2013-04-01" "2013-05-01" "2013-06-01"
[55] "2013-07-01" "2013-08-01" "2013-09-01" "2013-10-01" "2013-11-01" "2013-12-01"
Run Code Online (Sandbox Code Playgroud)
我想创建一个名为的因子 …
r ×10
ggplot2 ×2
dplyr ×1
gganimate ×1
knitr ×1
performance ×1
r-markdown ×1
reshape ×1
rstudio ×1