【发布时间】:2020-01-30 15:30:19
【问题描述】:
这是一个棘手的问题,我很高兴听到解决方案。 我有我所说的“双列”,即其内容可以分成两个单独的列的列。
这是我的输入:
structure(list(`A1-A2` = c(2, 1, 1), `A1-A3` = c(2, 1, 2)), row.names = c(NA,
-3L), class = c("tbl_df", "tbl", "data.frame"))
# A tibble: 3 x 2
`A1-A2` `A1-A3`
<dbl> <dbl>
1 2 2
2 1 1
3 1 2
对于一个专栏,我可以展示我想要做什么,但不能展示几个:
data %>%
separate(`A1-A2`, into = c("A1", "A2"), sep = ":") %>%
mutate_at(.vars = c(1:2), as.numeric) %>%
mutate(A2 = A1 -1) %>%
mutate(A1 = ifelse(A1 == 2, 0, A1))
# A tibble: 3 x 3
A1 A2 `A1-A3`
<dbl> <dbl> <dbl>
1 0 1 2
2 1 0 1
3 1 0 2
- 这会将
A1-A2列拆分为两个单独的列A1 和A2。 - 如果其值为 1,则在左列 (A1) 中设置 1
- 如果其值为 2,则将 1 设置到右列 (A2) 正如您在上面的代码中所见,这仅适用于拆分 1 个双列。
结果表最终应该像这样汇总每一列的所有获胜分数:
# A tibble: 1 x 3
A1 A2 A3
1 3 1 2
两个挑战:
如何以通用格式为任意数量的双列制定我的代码?
如何避免由于多个拆分列具有相同名称而出现的问题(例如,当拆分双列
A1-A2, A1-A3, A2-A3时,它们将出现两次A1, A2, A3)??
首选tidyverse (purrr::map) 中的方法,但我对其他解决方案持开放态度。
很棘手,不是吗?
【问题讨论】:
-
对不起,我很想给你更多的荣誉,但在解决方案中确实提到了你
-
是的。好的。我想你现在有解决方案了。全部。那就好了
-
再次感谢您的帮助,@akrun - 你是最棒的!
-
很高兴为您提供帮助
标签: r multiple-columns tidyverse purrr