gpt4 book ai didi

r - 如何在行中搜索相等的变量(以智能方式)并将相应的行存储为子集?

转载 作者:行者123 更新时间:2023-12-04 12:10:44 25 4
gpt4 key购买 nike

我有一个巨大的数据框。一列是从 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
    }

    最佳答案

    rle函数对于这样的东西真的很方便。它接受一个原子向量并返回一个 list带元素 lengthsvalues ,其中 lengths包含 values 中每个值的运行长度.

    自调用cbind在您的示例中,强制 test列到 factor ,我先把它转换成numeric :

    a1 <- within(a1, test <- as.numeric(as.character(test)))

    然后可以在一个很好的(基本上)单行中获得结果:
    with(rle(a1$test),
    split(a1, rep(seq_along(lengths), lengths))[values == BZ & lengths >= n_BZ]
    )

    关于r - 如何在行中搜索相等的变量(以智能方式)并将相应的行存储为子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13050330/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com