小编Vin*_*woo的帖子

n行的静态平均值列

给定一个包含两列的数据框,我想要计算第三列,它将包含每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)

r mean

5
推荐指数
2
解决办法
897
查看次数

按日期方式按特定时间剪切POSIXct

我有兴趣计算时间序列数据集中特定时间段的平均值.

鉴于这样的时间序列:

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点).

r time-series posixct

5
推荐指数
2
解决办法
4182
查看次数

使用gsub和regex提取特定单词

从前一个问题跳过,我遇到了使用正确的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)

regex r gsub

5
推荐指数
2
解决办法
1592
查看次数

制作一个ggplot线图,其中行遵循行顺序

我正在制作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中行的排序(两者都应该产生相同的结果)?

plot r ggplot2

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

根据来自不同列的位置计算数据框中的平均值

我有一个数据框设置如下:

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)

r mean dataframe

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

如何按唯一编号删除多列中的行?

给出这样的数据

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)

r

4
推荐指数
3
解决办法
1409
查看次数

粘贴和打印之间的差异(影响功能的结果)

首先,我不太确定粘贴和打印之间的区别是什么。但是我使用“打印”吐出通用语句,使用“粘贴”吐出使用/引用特定变量的语句。

我的问题是,在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之类的东西?

r

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

调整ggplot中的特定文本标签以避免重叠

给定一个虚拟数据集:

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",但这会调整所有点数.我想稍微调整一下重叠的点,以使它们可读.

plot r labels ggplot2

4
推荐指数
2
解决办法
5301
查看次数

根据其他变量的值创建新列

我的数据看起来像这样:

一组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)

或者任何其他可以扩展到长期怪异数据帧的方式

r dataframe

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

根据(部分)匹配列名计算行均值

我从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)

r

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

标签 统计

r ×10

dataframe ×2

ggplot2 ×2

mean ×2

plot ×2

gsub ×1

labels ×1

posixct ×1

regex ×1

time-series ×1