如何用字符串和数字协调数据框中的列(仅获取数字)?
how can I harmonized columns in a data frame with string and number (getting only numbers)?
我正在尝试在 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
根据您的经验,有什么想法吗?
谢谢!
一种方法是在 ||
上拆分并使用 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
编辑: 要将最后一个 space 也转换为逗号,我们可以在管道中添加另一个 mutate
,即
dd %>%
separate_rows(value, sep = ' \|\| ') %>%
mutate(value = gsub('.*=', '', value)) %>%
group_by(ID) %>%
summarise(value = toString(value)) %>%
mutate(value = gsub(' ', ',', value))
我正在尝试在 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
根据您的经验,有什么想法吗? 谢谢!
一种方法是在 ||
上拆分并使用 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
编辑: 要将最后一个 space 也转换为逗号,我们可以在管道中添加另一个 mutate
,即
dd %>%
separate_rows(value, sep = ' \|\| ') %>%
mutate(value = gsub('.*=', '', value)) %>%
group_by(ID) %>%
summarise(value = toString(value)) %>%
mutate(value = gsub(' ', ',', value))