我试过通过论坛搜索,但无法找到帮助.我对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)
非常感谢.
这是一个用于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)
| 归档时间: |
|
| 查看次数: |
233 次 |
| 最近记录: |