我有一个变量x,每一行都有字符列表:

dat <- data.frame(id = c(rep('a',2),rep('b',2),'c'),
                  x = c('f,o','f,o,o','b,a,a,r','b,a,r','b,a'),
                  stringsAsFactors = F)


我想重塑数据,以便每一行都是唯一的(idx)对,例如:

dat2 <- data.frame(id = c(rep('a',2),rep('b',3),rep('c',2)),
                   x = c('f','o','a','b','r','a','b'))

> dat2
id x
1  a f
2  a o
3  b a
4  b b
5  b r
6  c a
7  c b


我试图通过拆分字符列表并在每行中仅保留唯一的列表值来做到这一点:

dat$x <- sapply(strsplit(dat$x, ','), sort)
dat$x <- sapply(dat$x, unique)
dat <- unique(dat)

> dat
id       x
1  a    f, o
3  b a, b, r
5  c    a, b


但是,我不确定如何将行列表转换为单独的行条目。

我将如何完成?还是有一种更有效的方法来转换字符串列表以按所述方式整形数据?

最佳答案

您可以使用tidytext::unnest_tokens

library(tidytext)
library(dplyr)

dat %>%
  unnest_tokens(x1, x) %>%
  distinct()

  id x1
1  a  f
2  a  o
3  b  b
4  b  a
5  b  r
6  c  b
7  c  a

关于r - 从data.frame行中提取字符列表值并重塑数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50052574/

10-14 17:01
查看更多