在R中处理数据时,我想mutate
进行小标题调整,以使新列中的数值以不同的小标题查找。
给出导管移除的数据集:
# A tibble: 51 x 2
ExplYear RemovalReason
<dbl> <chr>
1 2018 Infection
2 2018 Dysfunction
3 2018 Infection
# ... etc.
每行对应于一个导管的拔除,我想添加一列Implants
,该列保存了在导管被拔除(_ex_planted)年中_im_plants的总数。
植入编号以impl_per_year
开头:
# A tibble: 13 x 2
ImplYear n
<dbl> <int>
1 2006 14
2 2007 46
3 2008 64
# ... etc.
我尝试使用map
和一个辅助函数mutate
进行第一个小动作:
lookup = function(year) { impl_per_year[impl_per_year$ImplYear == year,]$n }
explants %>% mutate(Implants = map(ExplYear, lookup)
但这会将大量空整数向量放入Implants
列:
# A tibble: 51 x 3
ExplYear RemovalReason Implants
<dbl> <chr> <list>
1 18 Infection <int [0]>
2 18 Dysfunction <int [0]>
3 18 Infection <int [0]>
# ... etc.
怎么了?
答案 0 :(得分:3)
您应该能够按年份简单地将两个表合并在一起。如果我们使用ExplTibble
称呼您的第一个小插曲ImplTibble
和第二个dplyr
,
ExplTibble %>% left_join(ImplTibble, by = c("ExplYear" = "ImplYear"))
这应添加一个新列n
,其中包含每年的植入物数量。
答案 1 :(得分:0)
library(tidyverse)
我更改了您的数据,以使我的插图不会显示NULL
。
df <- tribble(
~ExplYear, ~RemovalReason,
2018, "Infection",
2017, "Dysfunction",
2016, "Infection")
impl_per_year <- tribble(
~ImplYear, ~n,
2017, 14,
2016, 46,
2016, 64
)
left_join
是您要寻找的功能。它是dplyr::join
函数家族中执行此操作的一部分。
对“连接”变量使用相同的名称是很好的,但是在您的情况下,您需要使用by = c( ... )
选项让left_join
知道您要通过什么进行连接。
left_join(df, impl_per_year, by = c("ExplYear" = "ImplYear"))
# A tibble: 4 x 3
ExplYear RemovalReason n
<dbl> <chr> <dbl>
1 2018 Infection NA
2 2017 Dysfunction 14
3 2016 Infection 46
4 2016 Infection 64
根据需要,考虑使用right_join
,inner_join
等,直到获得所需的输出。例如:
inner_join(df, impl_per_year, by = c("ExplYear" = "ImplYear"))
# A tibble: 3 x 3
ExplYear RemovalReason n
<dbl> <chr> <dbl>
1 2017 Dysfunction 14
2 2016 Infection 46
3 2016 Infection 64
...这仅给出两个小节的成功匹配。