AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-22042742

Christopher Course's questions

Martin Hope
Hard_Course
Asked: 2025-03-03 10:08:22 +0800 CST

Correspondência de colunas em pares da esquerda para a direita em linhas de um dataframe para outro dataframe e adição de novas colunas com valores correspondentes

  • 10

Eu tenho um conjunto de dados como este:

 df1 <- data.frame(
    col1 = c(1, 2, 3),
    col2 = c(4, 5, 6),
    col3 = c(2, 8, 9),
    col4 = c(5, 11, 12),
    col5 = c(13, 14, 15),
    col6 = c(16, 17, 18),
    col7 = c(19, 20, 21),
    col8 = c(22, 23, 24)
  )

e um segundo que tem uma 'chave' de correspondências que estou procurando no df1:

df2 <- data.frame(
    colA = c(1, 2, 3),
    colB = c(4, 5, 6),
    value = c(100, 200, 300)
  )

o que estou tentando fazer é encontrar cada correspondência de coluna em pares da esquerda para a direita e criar uma nova coluna contendo o valor de df2 toda vez que houver uma correspondência, para que fique assim:

 df3 <- data.frame(
    col1 = c(1, 2, 3),
    col2 = c(4, 5, 6),
    col3 = c(2, 8, 9),
    col4 = c(5, 11, 12),
    col5 = c(13, 14, 15),
    col6 = c(16, 17, 18),
    col7 = c(19, 20, 21),
    col8 = c(22, 23, 24),
    match1 = c(100, 200, 300),
    match2 = c(200, NA, NA)
  )

Eu tentei esse tipo de abordagem:

df_match <- inner_join(df1, df2, by = c("col1" = "colA", "col2" = "colB"))
  
  df1$matched_value <- df_match$value[match(paste(df1$col1, df1$col2), paste(df_match$col1, df_match$col2))]

mas ele retorna apenas uma correspondência entre as linhas. O outro problema é que estou executando isso por muitas iterações que têm números variados de colunas em df1. Estou pensando que preciso de algo do tipo entre as linhas começa com 'col', mas estou bem travado.

  • 5 respostas
  • 94 Views
Martin Hope
Hard_Course
Asked: 2025-01-18 04:16:18 +0800 CST

DiagrammeR - definir posição do nó não funciona após atualização para R versão 4.4.2

  • 5

Estou tentando personalizar a posição do nó em um eixo x e y em um diagrama de rede usando o DiagrammeR, usando os seguintes DFS de nó, posição e arestas:

nodesdat <- read.table(text = "
id label color fillcolor fontcolor fontsize
1   1    A1 black     white     black       16
2   2    A3 black     white     black       16
5   5    A6 black     white     black       16
18 18    Si black     white     black       16
19 19    Z1 black     white     black       16
", header = TRUE)

positionsdat <- read.table(text = "
label id color fillcolor fontcolor fontsize x y
1     A1  1 black     white     black       16 3 3
2     A3  2 black     white     black       16 3 4
5     A6  5 black     white     black       16 3 5
18    Si 18 black     white     black       16 2 4
19    Z1 19 black     white     black       16 5 4
", header = TRUE)

edgesdat <- read.table(text = "
id from to          rel  dir arrowhead arrowtail  style color
1   1    1  1 connected_to both      odot      none dashed black
2   2    2  2 connected_to both      odot      none dashed black
5   5    5  5 connected_to both      odot      none dashed black
39 39   18  1 connected_to both    normal      odot dashed black
40 40   18  5 connected_to both    normal      odot  solid black
41 41   18 18 connected_to both      odot      none  solid black
42 42   19  2 connected_to both      odot    normal  solid black
43 43   19 19 connected_to both      odot      none  solid black
68 68   18  2 connected_to both      none    normal dashed black
69 69   18  2 connected_to both    normal      odot  solid black
", header = TRUE)

library(DiagrammeR)
library(DiagrammeRsvg)
library(dplyr)

g <- create_graph(nodes_df = nodesdat, edges_df = edgesdat, directed = TRUE)

render_graph(g)

g2 <- g %>%
  add_global_graph_attrs(attr = "width",value = 0.5, attr_type = "node") %>%     #node size %>%
  add_global_graph_attrs(attr = "penwidth",value = 2, attr_type = "edge" )  %>%  #edge size
  set_node_position(node=nodesdat$id,x = positionsdat$x, positionsdat$y) 

Recebo o erro "Erro em !use_labels && !(node ​​%in% graph$nodes_df[, 1]) : 'length = 5' em coerção para 'logical(1)'" na linha set_node_position.

Este erro não acontece quando executo o código no R versão 4.0.2, mas atualizei para 4.4.2

  • 1 respostas
  • 30 Views
Martin Hope
Christopher Course
Asked: 2024-02-01 22:09:21 +0800 CST

Uma maneira mais eficiente de fazer comparações agrupadas de pares em um grande conjunto de dados?

  • 5

Tenho dados parecidos com estes:

Tab4 <- read.table(text = "
  nodepair  `++`  `--`  `+-`  `-+`  `0+`  `+0`  `0-`  `-0`  `00` ES   
1 A1_A1        0     4     0     0     0     0     0     0    16 3    
2 A1_A1        0     5     0     0     0     0     0     0    16 4    
3 A1_A1        0     5     0     0     0     0     0     0    15 5    
", header = TRUE)

e escrevi este código para que cada grupo 'ES' seja comparado aos pares por nodepair:

ES_combs <- combn(unique(Tab4$ES), 2, simplify = FALSE)

Tab5 <- Tab4 %>%                            ########### compare every pair to eachother
  group_split(nodepair) %>% 
  map(.f = function(df) df %>%
        map(.x = 1:length(ES_combs),
            .f = ~df %>% 
              filter(ES %in% ES_combs[[.x]]) %>% 
              summarize(nodepair = first(nodepair),
                        ES_1 = ES[1],
                        ES_2 = ES[2], 
                        across(2:10, ~as.numeric(.))))) %>%
  bind_rows()

resultando nisso:

Tab5 <- read.table(text = "
  nodepair ES_1  ES_2   `++`  `--`  `+-`  `-+`  `0+`  `+0`  `0-`  `-0`  `00`
1 A1_A1    3     4         0     4     0     0     0     0     0     0    16
2 A1_A1    3     4         0     5     0     0     0     0     0     0    16
3 A1_A1    3     5         0     4     0     0     0     0     0     0    16
4 A1_A1    3     5         0     5     0     0     0     0     0     0    15
5 A1_A1    4     5         0     5     0     0     0     0     0     0    16
6 A1_A1    4     5         0     5     0     0     0     0     0     0    15    
", header = TRUE)

Isso funciona, mas demora muito quando estou comparando meu conjunto de dados completo. Eu esperava que houvesse um código mais eficaz. Suspeito que este aviso que recebo esteja expondo parte do problema:

Warning messages:
  1: Returning more (or less) than 1 row per `summarise()` group was deprecated in dplyr 1.1.0.
ℹ Please use `reframe()` instead.
ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()` always returns an ungrouped
data frame and adjust accordingly.

mas não tenho certeza para onde ir a partir daqui.

  • 1 respostas
  • 45 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve