给定一个包含两列的数据框,我想要计算第三列,它将包含每n行的平均值,同时保持数据帧的完整性.
给定数据框架
index<-1:20
V<-c(2,5,7,4,8,9,4,6,8,NA,3,4,5,6,0,4,5,7,5,3)
DF<-data.frame(index,V)
Run Code Online (Sandbox Code Playgroud)
我怎么能创建DF $ mean,它是每5行的非滚动均值.
index V mean
1 2 5.2
2 5 5.2
3 7 5.2
4 4 5.2
5 8 5.2
6 9 6.75
7 4 6.75
8 6 6.75
9 8 6.75
10 NA 6.75
11 3 3.6
12 4 3.6
13 5 3.6
14 6 3.6
15 0 3.6
16 4 4.8
17 5 4.8
18 7 4.8
19 5 4.8
20 3 4.8
Run Code Online (Sandbox Code Playgroud) 我有兴趣计算时间序列数据集中特定时间段的平均值.
鉴于这样的时间序列:
dtm=as.POSIXct("2007-03-27 05:00", tz="GMT")+3600*(1:240)
Count<-c(1:240)
DF<-data.frame(dtm,Count)
Run Code Online (Sandbox Code Playgroud)
在过去,我已经能够计算每日平均值
DF$Day<-cut(DF$dtm,breaks="day")
Day_Avg<-aggregate(DF$Count~Day,DF,mean)
Run Code Online (Sandbox Code Playgroud)
但现在我正试图把这一天缩短到特定的时间段,我不知道如何设置我的"休息时间".
与0:00:24:00的日平均值相反,例如,我可以获得正午至中午的平均值吗?
或者更奇特的是,我怎么能设置正午到中午的平均值,不包括晚上7点到早上6点(或者相反只包括白天的早上6点到晚上7点).
从前一个问题跳过,我遇到了使用正确的reg表达式语法来隔离特定单词的问题.
给定一个数据框:
DL<-c("Dark_ark","Light-Lis","dark7","DK_dark","The_light","Lights","Lig_dark","D_Light")
Col1<-c(1,12,3,6,4,8,2,8)
DF<-data.frame(Col1)
row.names(DF)<-DL
Run Code Online (Sandbox Code Playgroud)
我正在寻找从行名称中提取所有"黑暗"和"光"(忽略大写与小写)并创建仅包含字符串"Dark"或"Light"的第二列
Col2<-c("Dark","Light","dark","dark","light","Light","dark","Light")
DF$Col2<-Col2
Col1 Col2
Dark_ark 1 Dark
Light-Lis 12 Light
dark7 3 dark
DK_dark 6 dark
The_light 4 light
Lights 8 Light
Lig_dark 2 dark
D_Light 8 Light
Run Code Online (Sandbox Code Playgroud)
我已经改变了原始数据以详细说明我当前的问题,但是Tyler Rinker的一个很好的答案,我使用了这个:
DF$Col2<-gsub("[^dark|light]", "", row.names(DF), ignore.case = TRUE)
Run Code Online (Sandbox Code Playgroud)
但gsub在一些共同的字母上被绊倒了.搜索留言板以使用正则表达式隔离一个确切的单词,看起来答案应该是使用双斜杠
\\<light\\>
Run Code Online (Sandbox Code Playgroud)
要么
\\blight\\b
Run Code Online (Sandbox Code Playgroud)
那么为什么这条线
DF$Col2<-gsub("[^\\<dark\\>|\\<light\\>]", "", row.names(DF), ignore.case = TRUE)
Run Code Online (Sandbox Code Playgroud)
不拉上面的所需栏?相反,我得到了
Col1 Col2
Dark_ark 1 Darkark
Light-Lis 12 LightLi
dark7 3 dark
DK_dark 6 DKdark
The_light 4 Thlight
Lights 8 Light
Lig_dark 2 Ligdark
D_Light 8 …Run Code Online (Sandbox Code Playgroud) 我正在制作ggplot线图,或者最好将其描述为散点图,其中线以指定方式连接点.这是我的示例数据:
X<-c(-37,-25,-27,4,20,30,22,10)
Y<-c(-5,-9,10,15,-13,-0.04,4,0.03)
Day<-c(1,2,3,4,5,6,7,8)
DF<-data.frame(X,Y,Day)
Run Code Online (Sandbox Code Playgroud)
目标是绘制XY点,并按时间顺序连接点(第1天连接到第2天,第2天到第3天等).如果我这样画:
ggplot(DF,aes(x=X, y=Y, label=Day),legend=FALSE)+
geom_line(,size=0.3)+
geom_point( fill='red', shape=21)+
geom_text(size=7)+
theme_bw()
Run Code Online (Sandbox Code Playgroud)

但是可以看出,这些点越来越多地连接在X轴上(第1天连接到第3天,第3天到第2天,等等).有没有办法更改ggplot线图的默认值,以遵循"日"列中列出的模式?或者,要遵循DF中行的排序(两者都应该产生相同的结果)?
我有一个数据框设置如下:
N1 <- c(1,2,4,3,2,3,4,5,4,3,4,5,4,5,6,8,9)
Start <- c("","Start","","","","","","","Start","","","","Start","","","","")
Stop <- c("","","","","Stop","","","","","","Stop","","","","Stop","","")
Run Code Online (Sandbox Code Playgroud)
N1是我感兴趣的数据.我想根据接下来两列中的"开始"和"停止"位置计算一串数字的平均值.
"开始"和"停止"定义的字符串如下所示:
2,4,3,2
4,3,4
4,5,6
Run Code Online (Sandbox Code Playgroud)
所以我的最终结果应该是3个意思:
2.75,3.6,5
Run Code Online (Sandbox Code Playgroud) 给出这样的数据
C1<-c(3,-999.000,4,4,5)
C2<-c(3,7,3,4,5)
C3<-c(5,4,3,6,-999.000)
DF<-data.frame(ID=c("A","B","C","D","E"),C1=C1,C2=C2,C3=C3)
Run Code Online (Sandbox Code Playgroud)
如何删除所有列中的-999.000数据
我知道每列都有效
DF2<-DF[!(DF$C1==-999.000 | DF$C2==-999.000 | DF$C3==-999.000),]
Run Code Online (Sandbox Code Playgroud)
但我想避免引用每一列.我想有一种简单的方法来引用特定数据框中的所有列,也就是:
DF3<-DF[!(DF[,]==-999.000),]
Run Code Online (Sandbox Code Playgroud)
要么
DF3<-DF[!(DF[,(2:4)]==-999.000),]
Run Code Online (Sandbox Code Playgroud)
但显然这些都行不通
出于好奇,奖励积分,如果你能告诉我为什么我需要在结束方括号之前的最后一个逗号,如:
==-999.000),]
Run Code Online (Sandbox Code Playgroud) 首先,我不太确定粘贴和打印之间的区别是什么。但是我使用“打印”吐出通用语句,使用“粘贴”吐出使用/引用特定变量的语句。
我的问题是,在paste函数中使用时,如果在“ paste”语句后的函数中包含任何内容,则会丢失粘贴的输出。
请查看以下三个功能:
TS<-5
Run Code Online (Sandbox Code Playgroud)
示例1-一切正常
T<-function(){
if(exists("TS"))
{paste("TS= ", TS, sep=" ")}
else
if(!exists("TS"))
{print.noquote("No TS Values")}
}
Run Code Online (Sandbox Code Playgroud)
示例2-我的问题。当我在“ if”语句之后添加任何内容(在本例中为其他打印命令)时,我将丢失粘贴的输出
T<-function(){
if(exists("TS"))
{paste("TS= ", TS, sep=" ")}
else
if(!exists("TS"))
{print.noquote("No TS Values")}
print("my exsistance removes paste output")
}
Run Code Online (Sandbox Code Playgroud)
例3-在“ if”之前放置的相同语句没有负面影响
T<-function(){
print("my exsistance does not remove paste output")
if(exists("TS"))
{paste("TS= ", TS, sep=" ")}
else
if(!exists("TS"))
{print.noquote("No TS Values")}
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释该功能在哪里发生冲突。而且更好的是我该如何解决它,这样我才能paste在函数中有其他操作之后的语句
基本上,我如何才能使示例2正常工作。
布朗尼点-(出于视觉一致性)在使用“ print.noquote”时,是否存在诸如paste.noquote之类的东西?
给定一个虚拟数据集:
V1<-c(1,10,30,22,22,20)
V2<-c(4,17,4,33,33.2,15)
V3<-c(20,20,15,34,33,30)
V4<-c("A","A","A","B","B","B")
DF<-data.frame(V1,V2,V3,V4)
Run Code Online (Sandbox Code Playgroud)
如果我要绘制一个如此的气泡图:
symbols(DF$V1,DF$V2,circles=V3,inches=0.35,fg="darkblue",bg="red")
text(DF$V1,DF$V2,V4,cex=0.5)
Run Code Online (Sandbox Code Playgroud)
我与第4和第5个标签文本有一些重叠.使用下面的代码,我可以通过调整特定点来消除这种重叠
text(DF$V1,DF$V2+c( 0, 0, 0, 1, -1,0 ),V4,cex=0.5)
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,但我想在ggplot工作.如果我做一个简单的ggplot
ggplot(DF,aes(x=V1,y=V2,size=V3,label=V4),legend=FALSE)+geom_point(color='darkblue',fill="red", shape=21)+theme_bw()+geom_text(size=5)
Run Code Online (Sandbox Code Playgroud)
我得到相同的重叠,但我不知道如何调整各个点以避免重叠.我尝试过使用"thigmophobe.labels",但这会调整所有点数.我想稍微调整一下重叠的点,以使它们可读.
我的数据看起来像这样:
一组10个字符变量
Char<-c("A","B","C","D","E","F","G","H","I","J")
Run Code Online (Sandbox Code Playgroud)
还有一个看起来像这样的数据框
Col1<-seq(1:25)
Col2<-c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5)
DF<-data.frame(Col1,Col2)
Run Code Online (Sandbox Code Playgroud)
我想要做的是在数据框中添加第三列,逻辑是1 = A,2 = B,3 = C等等.所以最终的结果是
Col3<-c("A","A","A","A","A","B","B","B","B","B","C","C","C","C","C","D","D","D","D","D","E","E","E","E","E")
DF<-data.frame(Col1,Col2,Col3)
Run Code Online (Sandbox Code Playgroud)
对于这个简单的例子,我可以像这个问题一样简单替换: 根据另一列中的4个值创建新列
但是我的实际数据集比这个简单的例子更大,变量更大,因此不可能像上面的答案那样写出等价物.
所以我希望有一些代码可以应用于更大的数据帧.也许是通过Col2的所有值循环并将它们与Char的位置相匹配的东西.
1=Char[1] 2=Char[2] 3=Char[3]...... for the entire length of Col2
Run Code Online (Sandbox Code Playgroud)
或者任何其他可以扩展到长期怪异数据帧的方式
我从3个大型数据表(名为A1,A2,A3)开始.每个表有4个数据列(V1-V4),1个"日期"列,在所有三个表中都是常量,以及数千行.
这是一些近似我的表的虚拟数据.
A1.V1<-c(1,2,3,4)
A1.V2<-c(2,4,6,8)
A1.V3<-c(1,3,5,7)
A1.V4<-c(1,2,3,4)
A2.V1<-c(1,2,3,4)
A2.V2<-c(2,4,6,8)
A2.V3<-c(1,3,5,7)
A2.V4<-c(1,2,3,4)
A3.V1<-c(1,2,3,4)
A3.V2<-c(2,4,6,8)
A3.V3<-c(1,3,5,7)
A3.V4<-c(1,2,3,4)
Date<-c(2001,2002,2003,2004)
DF<-data.frame(Date, A1.V1,A1.V2,A1.V3,A1.V4,A2.V1,A2.V2,A2.V3,A2.V4,A3.V1,A3.V2,A3.V3,A3.V4)
Run Code Online (Sandbox Code Playgroud)
所以这就是我的数据框最终看起来像:
Date A1.V1 A1.V2 A1.V3 A1.V4 A2.V1 A2.V2 A2.V3 A2.V4 A3.V1 A3.V2 A3.V3 A3.V4
1 2001 1 2 1 1 1 2 1 1 1 2 1 1
2 2002 2 4 3 2 2 4 3 2 2 4 3 2
3 2003 3 6 5 3 3 6 5 3 3 6 5 3
4 2004 4 8 7 4 4 …Run Code Online (Sandbox Code Playgroud)