我在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 }"
你重复你的问题了吗?遍历数据帧以获取字符串