首页 > 解决方案 > 通过数据框解析以在 R 中创建字符串

问题描述

我在 R 中有一个像这样的数据框

我希望能够创建一个函数来提示用户更改给定“v”和“w”输入的“e”值,并输出一个依赖项字符串。

   v  w  e  
1  d  f -- 
2  d  a -> 
3  f  a -> 
4  q  a -> 

该函数如下所示:

convert_dag <- function(df,v,w,e) {

}

并且预期的输出看起来像这样:它将首先列出所有唯一值,然后是依赖项。

> str <- convert_dag(df, 'q','f','<--')
> str
dag {
a
d
f
q
d <- f
d -> a
f -> a
q -> a
}

这样我就可以将其用作“dagitty()”函数的输入来创建 DAG 图。

g <- dagitty(str)

我的解决方案:

convert_dag <- function(df,v,w,e) {
  z <- 'dag{'
  for (row in 1:nrow(df)) {
    if (df[row,'v'] == v && df[row,'w'] == w) {
      z <- paste(z,paste(df[row,'v'], e, df[row,'w']), collapse = '')
    } else {
      z <- paste(z,paste(df[row,'v'], df[row,'e'], df[row,'w']), collapse = '')
    }
  }
  z <- paste(z,'}')
  z
}

但是,我不喜欢这种解决方案,是否有更有效的清洁方式来编写此代码?

标签: rdirected-acyclic-graphs

解决方案


这是重点吗?

library(tidyverse)
df = tribble(
  ~v,  ~w,  ~e,  
  "d", "f",  "--", 
  "d", "a",  "->", 
  "f", "a",  "->", 
  "q", "a",  "->")

convert_dag = function(df,V,W,E) {
  df %>% mutate(
    txt = ifelse(v==V & w==W, paste(V,E,W), paste(v,e,w))
  ) %>% pull(txt) %>% paste(.,collapse = " ") %>%  paste('dag{',.,'}')
}
convert_dag(df, "d", "f", "->")
#[1] "dag{ d -> f d -> a f -> a q -> a }"

您是否重复了您的问题?

循环遍历数据框以获取字符串


推荐阅读