簡體   English   中英

r-列表列數據框和行號的條件

[英]r - condition on list-column dataframe and row number

我有一個數據框,其列表列如下所示:

L1 <- data.frame(a = I(list(
  c(1, 2, 6, 7),
  c(1, 2, 3, 6, 7),
  c(2, 3, 5),
  c(4, 5),
  c(4, 5, 7),
  c(6)
)))

我需要基於以下假設,根據行號值和列表列中的值來產生兩個新列:

在此處輸入圖片說明

我們使用map2遍歷list列,並與相應的row_number()以創建兩列

library(tidyverse)
 L1 %>% 
   mutate(n = row_number(),
             col1 = map2_int(a, n, ~ as.integer(any((.x - 1) > .y))),
             col2 = map2_int(a, n, ~ as.integer( any((.x - .y) < 0)))) %>%
   select(-n)    
#              a col1 col2
#1   1, 2, 6, 7    1    0
#2 1, 2, 3,....    1    1
#3      2, 3, 5    1    1
#4         4, 5    0    0
#5      4, 5, 7    1    1
#6            6    0    0

您可以通過例如apply進行操作。

df <- cbind(L1,
  t(
    sapply(seq(nrow(L1)), function(i) {
      cbind(col1 = any((L1$a[[i]] - i) == 1) + 0,
            col2 = any((L1$a[[i]] - i) == -1) + 0)
      })
    )
) 

colnames(df) <- c(colnames(L1), "col1", "col2")

df

             a col1 col2
1   1, 2, 6, 7    1    0
2 1, 2, 3,....    1    1
3      2, 3, 5    0    1
4         4, 5    1    0
5      4, 5, 7    0    1
6            6    0    0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM