解析数据帧,在r中创建字符串



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

我希望能够使一个函数,以提示用户改变'e'的值给定输入'v'和'w',并输出一个字符串的依赖关系。

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
}

我不喜欢这个解决方案,然而,有没有更有效的更干净的方式来编写这段代码?

这是重点吗?

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 }"

你重复你的问题了吗?遍历数据帧以获取字符串

最新更新