我有一个巨大的数据框。一列是从 1 到 2 的整数。我需要一种方法来查找在该列中具有多个特定值的连续行,对这些行进行子集化,然后将它们处理成图表。
我附上了一个小例子,它至少完成了一些所需的工作:我能够打印出我正在寻找的子集。但还有两个问题:
- 我想 R 中有更聪明的方法,然后在整个 data.frame 上应用“for”循环。有什么提示吗?
- 我必须将哪个命令放在现在“打印”命令用于存储临时 data.frame 的位置?我想我需要一个列表,因为子集的长度不同......
我已经查看了聚合或 ddply,但无法提出解决方案。
非常感谢任何帮助。
test<-c(rep(1,3),rep(2,5),rep(1,3),rep(2,3),rep(1,3),rep(2,8),rep(1,3))
letters<-c("a","b","c","d")
a1<-as.data.frame(cbind(test,letters))
BZ<-2 #The variable to look for
n_BZ=4 #The number of minimum appearences
k<-1 # A variable to be used as a list item index in which the subset will be stored
for (i in 2:nrow(a1)){
if (a1$test[i-1]!=BZ & a1$test[i]==BZ) # When "test" BECOMES "2"
{t_temp<-a1[i,]} #... start writing a temporary array
else if (a1$test[i-1]==BZ & a1$test[i]==BZ) # When "test" REMAINS "2"
{t_temp<-rbind(t_temp,a1[i,])} #... continue writing a temporary array
else if (a1$test[i-1]==BZ & a1$test[i]!=BZ) # When "test" ENDS BEING "2"
{if (nrow(t_temp)>n_BZ) #... check if the temporary array has more rows then demanded
{print(t_temp) #... print the array (desired: put the array to a list item k)
k<-k+1}} #... increase k
else # If array too small
{t_temp<-NULL} # reset
}