我正在尝试协调R中的df。我有一列已使用不同格式填充 例如:
ID value
1 first value in 5' = 9 || second value in 20' = 8
2 first value in 5' = 6 || second value in 20' = 12
3 5,6
4 7,8
5 9 10
到目前为止我要尝试的是
library(stringr)
df <- read.table("data", sep="\t", header = T)
value2 <- df$value %>% str_match_all("[0-9]+") %>% unlist %>% as.numeric
我希望这个输出
ID value
1 9,8
2 6,12
3 5,6
4 7,8
5 9,10
但是显然,实际输出是字符串[1] 9 8 6 12 5 6 7 8 9 10
根据您的经验,有什么想法吗? 谢谢!
答案 0 :(得分:1)
一种方法是分割||
并使用gsub
提取=
之后的值。然后,我们可以使用toString()
来汇总它们,即
library(tidyverse)
dd %>%
separate_rows(value, sep = ' \\|\\| ') %>%
mutate(value = gsub('.*=', '', value)) %>%
group_by(ID) %>%
summarise(value = toString(value))
给出,
# A tibble: 5 x 2 ID value <int> <chr> 1 1 " 9, 8" 2 2 " 6, 12" 3 3 5,6 4 4 7,8 5 5 9 10
编辑:要将最后一个空格也转换为逗号,我们可以在管道中添加另一个mutate
,即
dd %>%
separate_rows(value, sep = ' \\|\\| ') %>%
mutate(value = gsub('.*=', '', value)) %>%
group_by(ID) %>%
summarise(value = toString(value)) %>%
mutate(value = gsub(' ', ',', value))