【问题标题】:assign grouping variable based on dataframe rows present R根据存在的数据框行分配分组变量R
【发布时间】:2018-07-30 17:32:34
【问题描述】:

我在 R 中有一个这样的列表:

cat1  
cat7  
cat10  
cat4  
frog  
dino11  
dino12  
dino15  
rabbit  

我需要创建一个如下所示的新数据框:

cat1 frog  
cat7 frog  
cat10 frog  
cat4 frog  
dino11 rabbit  
dino12 rabbit  
dino15 rabbit

想法?谢谢!

【问题讨论】:

  • 您可能想澄清您的数据是什么。 DF = data.frame(c("cat1", "cat7", "cat10", "cat4", "frog", "dino11", "dino12", "dino15", "rabbit"))? “列表”在 r 中具有特定含义。

标签: r dplyr gsub


【解决方案1】:

我们根据'v1'中不出现数字创建分组变量,取lag,新建列'v2'作为'v1'的last元素,去掉@987654323 @ 每组的行和感兴趣的select

library(tidyverse)
df %>%
  group_by(grp = lag(cumsum(grepl("^[^0-9]+$", v1)), default = 0)) %>% 
  mutate(v2 = last(v1)) %>% 
  slice(-n()) %>%
  ungroup %>%
  select(-grp)
# A tibble: 7 x 2
#  v1     v2    
#  <chr>  <chr> 
#1 cat1   frog  
#2 cat7   frog  
#3 cat10  frog  
#4 cat4   frog  
#5 dino11 rabbit
#6 dino12 rabbit
#7 dino15 rabbit

数据

df <- structure(list(v1 = c("cat1", "cat7", "cat10", "cat4", "frog", 
"dino11", "dino12", "dino15", "rabbit")), .Names = "v1",
 class = "data.frame", row.names = c(NA, -9L))

【讨论】:

    【解决方案2】:

    类似于@akrun 的答案,但使用 data.table:

    library(data.table)
    setDT(df)
    
    df[, .(
      anum = v1[-.N], 
      a = v1[.N]
    ), by=.(g = cumsum(!(shift(v1) %like% "\\d")))]
    
       g   anum      a
    1: 1   cat1   frog
    2: 1   cat7   frog
    3: 1  cat10   frog
    4: 1   cat4   frog
    5: 2 dino11 rabbit
    6: 2 dino12 rabbit
    7: 2 dino15 rabbit
    

    【讨论】:

      【解决方案3】:

      仅使用基本 R,您可以使用 greplrle

      where <- grepl("[[:digit:]]", x)
      r <- rle(where)
      A <- x[where]
      B <- rep.int(x[!where], times = r$lengths[r$values])
      
      data.frame(A, B)
      #       A      B
      #1   cat1   frog
      #2   cat7   frog
      #3  cat10   frog
      #4   cat4   frog
      #5 dino11 rabbit
      #6 dino12 rabbit
      #7 dino15 rabbit
      

      数据。

      x <- scan(what = character(), text = "
      cat1  
      cat7  
      cat10  
      cat4  
      frog  
      dino11  
      dino12  
      dino15  
      rabbit  
      ")
      

      【讨论】:

      • @Frank 对,我想我很着急。 (但不确定。)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      相关资源
      最近更新 更多