在R中特定时间点序列的子集中,我可以使用seq吗?
我有一个如下所示的数据框:在R中特定时间点序列的子集中,我可以使用seq吗?,r,subset,data-management,R,Subset,Data Management,我有一个如下所示的数据框: structure(list(A = c(70, 70, 70, 70, 70, 70), T = c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6), X = c(434.01, 434.01, 434.75, 434.75, 434.75, 434.01), Y = c(454.92, 454.92, 454.92, 454.92, 454.18, 454.92 ), V = c(0, 0, 21.128, 0, 14.94, 14.94), th
structure(list(A = c(70, 70, 70, 70, 70, 70), T = c(0.1, 0.2,
0.3, 0.4, 0.5, 0.6), X = c(434.01, 434.01, 434.75, 434.75, 434.75,
434.01), Y = c(454.92, 454.92, 454.92, 454.92, 454.18, 454.92
), V = c(0, 0, 21.128, 0, 14.94, 14.94), thetarad = c(0.151841552716899,
0.151841552716899, 0.150990672182432, 0.150990672182432, 0.150177486839524,
0.151841552716899), thetadeg = c(8.69988012340509, 8.69988012340509,
8.6511282599214, 8.6511282599214, 8.6045361718215, 8.69988012340509
)), .Names = c("A", "T", "X", "Y", "V", "thetarad", "thetadeg"
), row.names = 1423:1428, class = "data.frame")
我想用30秒的时间间隔对R中的特定时间点进行子集。我可以通过手动子集我想要的每个时间点来实现这一点:
a1=subset(binA, T==0.1)
a2=subset(binA, T==30)
a3=subset(binA, T==60)
a4=subset(binA, T==90)
a5=subset(binA, T==120)
a6=subset(binA, T==150)
a7=subset(binA, T==180)
a8=subset(binA, T==210)
a9=subset(binA, T==240)
a10=subset(binA, T==270)
a11=subset(binA, T==300)
a12=subset(binA, T==330)
a13=subset(binA, T==360)
a14=subset(binA, T==390)
a15=subset(binA, T==420)
a16=subset(binA, T==450)
a17=subset(binA, T==480)
a18=subset(binA, T==510)
a19=subset(binA, T==540)
a20=subset(binA, T==570)
a21=subset(binA, T==599.5)
我尝试使用sapply
和seq
函数进行子集设置,但结果令人困惑。我还想计算每个数据子集中唯一的A。我还知道我可以使用plyr
软件包中的count
功能来完成这项工作
a1=count(unique(subset(binA, T==0.1)))
但是count将使用一个数据帧,而不是多个数据帧(如果我错了,请纠正我)。我还想为每个子集采用标记的方法(这对于仅在一个数据帧中使用SAPPY应该很容易)。因此,我需要关于如何编写具有特定seq点的函数的帮助
我知道这个问题很小,但我们将不胜感激
谢谢假设数据在
df
数据框中,然后尝试以下操作:
sapply(c(0.1,seq(30,599,30),599.5),
function(x)
length(unique(df[ df$T==x, "A"])))
假设数据位于
df
数据框中,则尝试以下操作:
sapply(c(0.1,seq(30,599,30),599.5),
function(x)
length(unique(df[ df$T==x, "A"])))
您应该能够使用以下代码来获得您想要的。这不适用于0.1和599.5,但应该易于操作
timeintervals <- seq(0,600, 30)
for(i in 1:length(timeintervals)
{
# create the subsets for each time interval
assign(
paste0("a",i),
df[df$T == timeintervals[i],]
)
# get all unique As
assign(
paste0("b",i),
unique(df[df$T == timeintervals[i],"A"])
)
}
timeinterval您应该能够使用以下代码获得所需的内容。这不适用于0.1和599.5,但应该易于操作
timeintervals <- seq(0,600, 30)
for(i in 1:length(timeintervals)
{
# create the subsets for each time interval
assign(
paste0("a",i),
df[df$T == timeintervals[i],]
)
# get all unique As
assign(
paste0("b",i),
unique(df[df$T == timeintervals[i],"A"])
)
}
timeinterval我想您需要的功能是split
:
subsetted.by.T <- split(dfrm, dfrm$T)
lapply(subsetted.by.T, nrow)
$`0.1`
[1] 1
$`0.2`
[1] 1
$`0.3`
[1] 1
$`0.4`
[1] 1
$`0.5`
[1] 1
$`0.6`
[1] 1
> subsetted.by.T[[1]]
A T X Y V thetarad thetadeg
1423 70 0.1 434.01 454.92 0 0.1518416 8.69988
subseted.by.T subseted.by.T[[1]]
一个T X Y V thetarad thetadeg
1423 70 0.1 434.01 454.92 0 0.1518416 8.69988
如果您想命名这些单独的项目,那么命名我认为您想要的功能是拆分
:
subsetted.by.T <- split(dfrm, dfrm$T)
lapply(subsetted.by.T, nrow)
$`0.1`
[1] 1
$`0.2`
[1] 1
$`0.3`
[1] 1
$`0.4`
[1] 1
$`0.5`
[1] 1
$`0.6`
[1] 1
> subsetted.by.T[[1]]
A T X Y V thetarad thetadeg
1423 70 0.1 434.01 454.92 0 0.1518416 8.69988
subseted.by.T subseted.by.T[[1]]
一个T X Y V thetarad thetadeg
1423 70 0.1 434.01 454.92 0 0.1518416 8.69988
如果你想命名这些单独的项目,那么命名如果目的只是为了得到平均值、唯一计数等,你不需要子集。还有一件事,id t因子是连续的,你需要制作箱子吗?我在这里假设一个因素
以下是一种使用plyr
ddply(df,~T,summarise,l=length(unique((A))))
ddply(df,~T,summarise,m=mean(thetadeg))
如果目的只是为了得到平均数、唯一数等,你不需要子集。还有一件事,id t因子是连续的,你需要做箱子吗?我在这里假设一个因素
以下是一种使用plyr
ddply(df,~T,summarise,l=length(unique((A))))
ddply(df,~T,summarise,m=mean(thetadeg))
也许cut
或findInterval
在这里有用……也许cut
或findInterval
在这里有用……我知道split,我想过使用它,但我需要的数据是间隔数据,而不是所有时间点的数据。谢谢这意味着你应该使用“切割”。我知道分割,我也想过使用它,但我需要的是间隔数据,而不是所有时间点的数据。谢谢这意味着您应该使用“剪切”。我需要的数据是间隔数据,而不是所有时间点的数据。谢谢我需要我的数据在时间间隔上,而不是在所有时间点上。谢谢对我只是不知道如何输入seq
。现在,我还可以通过将最后一部分更改为mean(unique(binA[binA$T==x,“thetadeg”]))
谢谢!对我只是不知道如何输入seq
。现在,我还可以通过将最后一部分更改为mean(unique(binA[binA$T==x,“thetadeg”]))
谢谢!