我有一个data frame
,其中各个行值用逗号分隔,我想将逗号值分隔成各个行值。因此,使用this SO post能够在各个行中转换以逗号分隔的字符串值,但是,如果该行与我想对此取反,它将字符串的第一个值替换为第一个值,即First string value is the last row value
。
# create data
library(tidyverse)
d <- data_frame(
col1 = c("1,2,3")
)
Dataframe
# # A tibble: 3 x 2
# col1
# <chr>
# 1 1,2,3
# tidy data
separate_rows(d, col1, convert = TRUE)
Current Output
# # A tibble: 6 x 2
# col1
# <int>
# 1
# 2
# 3
Desired Output
# tidy data
separate_rows(d, col1, convert = TRUE)
# # A tibble: 6 x 2
# col1
# <int>
# 3
# 2
# 1
答案 0 :(得分:4)
用逗号分隔列,反转向量,构造一个数据框。
样本数据:
> d = data.frame(col1=c("23,34,99","9,3,2"),stringsAsFactors=FALSE)
> d
col1
1 23,34,99
2 9,3,2
要做:
> data.frame(col1=do.call(c,lapply(strsplit(d$col1,","),rev)))
col1
1 99
2 34
3 23
4 2
5 3
6 9
答案 1 :(得分:2)
我们可以使用slice
library(tidyverse)
separate_rows(d, col1, convert = TRUE) %>%
slice(n():1)
# col1
# <int>
#1 3
#2 2
#3 1
对于多行,以@Spacedman为例
d = data.frame(col1=c("23,34,99","9,3,2"),stringsAsFactors=FALSE)
上述解决方案会给出
separate_rows(d, col1, convert = TRUE) %>%
slice(n():1)
# A tibble: 6 x 1
col1
<int>
#1 2
#2 3
#3 9
#4 99
#5 34
#6 23
但是,如果OP需要分别反转每一行的字符串,我们可以使用group
创建一个row_number
列,然后按照@Sotos的建议分别反转每一行的字符串>
d %>%
mutate(group = row_number()) %>%
separate_rows(col1, convert = TRUE) %>%
group_by(group) %>%
slice(n():1) %>%
ungroup() %>%
select(-group)
# A tibble: 6 x 1
# col1
# <int>
#1 99
#2 34
#3 23
#4 2
#5 3
#6 9
答案 2 :(得分:0)
您可以使用stri_reverse
包中的stringi
并在分离之前反转字符串,即
library(tidyverse)
d %>%
mutate(col1 = stringi::stri_reverse(col1)) %>%
separate_rows(col1)
给出
A tibble: 3 x 1 col1 <chr> 1 3 2 2 3 1