字符串作为公式

nic*_*hah 8 r dplyr

我试过通过论坛搜索,但无法找到帮助.我对R很陌生,并且在加载一些字符串以用作公式方面成功有限.

我有一个csv具有以下格式:

            Sam, Frank, Dennis, Steven, Robert, Georgia
Region_1    218,    763,    811,    812,    797,    574
Region_2    474,    983,    343,    697,    310,    335
Region_3    700,    813,    133,    212,    906,    680
Region_4    212,    581,    893,    514,    530,    795
Run Code Online (Sandbox Code Playgroud)

我可以加载它并在我的数据框中添加额外的列,添加特定的列(即Sam + Frank,Dennis + Georgia).

如果我将团队硬编码到我的代码中,我可以做到,例如:

temp <- mutate(temp, team_1 = Sam + Robert) 
Run Code Online (Sandbox Code Playgroud)

我的问题是我有另一个包含2列列表的csv,这些是每天更改的团队,例如:

Team 1  Sam + Robert
Team 2  Frank + Georgia
Team 3  Frank + Steven
Team 4  Robert + Dennis
Team 5  Frank + Sam
Run Code Online (Sandbox Code Playgroud)

有没有办法可以将此csv列表加载到R中并将这些团队成员列添加到一起.

但是我无法在csv文件中看到添加此列表,并且动态地拥有一个包含团队成员总数的新数据框.

有人能帮我这个吗?

我希望最终得到这样的结果(将团队成员(团队1,团队2等来自第二个csv文件)的总和作为附加列:

         Sam,   Frank,  Dennis, Steven, Robert, Georgia,    Sam + Robert,   Frank + Georgia,    Frank + Steven, Robert + Dennis,    Frank + Sam
 Region_1   218,    763,    811,    812,    797,    574,    981,    1337,   1575,   1608,   981
 Region_2   474,    983,    343,    697,    310,    335,    1457,   1318,   1680,   653,    1457
 Region_3   700,    813,    133,    212,    906,    680,    1513,   1493,   1025,   1039,   1513
 Region_4   212,    581,    893,    514,    530,    795,    793,    1376,   1095,   1423,   793
Run Code Online (Sandbox Code Playgroud)

非常感谢.

Mau*_*ers 3

这是一个用于rlang::parse_expr直接解析第二个表达式的选项data.frame

df1 %>% bind_cols(map_dfc(df2$V2, ~df1 %>%
    transmute(!!as.character(.x) := !!rlang::parse_expr(as.character(.x)))))
#  Sam Frank Dennis Steven Robert Georgia Sam + Robert Frank + Georgia
#1 218   763    811    812    797     574         1015            1337
#2 474   983    343    697    310     335          784            1318
#3 700   813    133    212    906     680         1606            1493
#4 212   581    893    514    530     795          742            1376
#  Frank + Steven Robert + Dennis Frank + Sam
#1           1575            1608         981
#2           1680             653        1457
#3           1025            1039        1513
#4           1095            1423         793
Run Code Online (Sandbox Code Playgroud)

或者您可以根据团队命名新列:

df1 %>% bind_cols(map2_dfc(df2$V1, df2$V2, ~df1 %>%
    transmute(!!as.character(.x) := !!rlang::parse_expr(as.character(.y)))))
#  Sam Frank Dennis Steven Robert Georgia Team 1 Team 2 Team 3 Team 4 Team 5
#1 218   763    811    812    797     574   1015   1337   1575   1608    981
#2 474   983    343    697    310     335    784   1318   1680    653   1457
#3 700   813    133    212    906     680   1606   1493   1025   1039   1513
#4 212   581    893    514    530     795    742   1376   1095   1423    793
Run Code Online (Sandbox Code Playgroud)

这个想法是我们使用map(或) 来应用存储在的上下文中的map2“公式” 。表达式的计算结果为。 df2transmutedf1!!parse_expr(...)


样本数据

df1 <- read.table(text =
    "Sam Frank Dennis Steven Robert Georgia
Region_1    218    763    811    812    797    574
Region_2    474    983    343    697    310    335
Region_3    700    813    133    212    906    680
Region_4    212    581    893    514    530    795", header = T)


df2 <- read.table(text =
    "'Team 1'  'Sam + Robert'
'Team 2'  'Frank + Georgia'
'Team 3'  'Frank + Steven'
'Team 4'  'Robert + Dennis'
'Team 5'  'Frank + Sam'", header = F)
Run Code Online (Sandbox Code Playgroud)