用向量作为项目扩展列

时间:2018-06-22 03:30:22

标签: r dataframe

我有一个以下格式的数据框

Position   data     
48575185    1
48575150    3
48604751    5
48604673    c(3,5)
48591918    2
48591919    8

数据列中的某些数据是数字,而某些是数字向量。我想创建一个新的数据框,使带有矢量项的行在矢量中的每个值都具有该行的新副本,本质上将该表扩展为:

Position   data     
48575185    1
48575150    3
48604751    5
48604673    3
48604673    5
48591918    2
48591919    8

我如何在r中执行此操作?我对R非常陌生。我找到了一个名为expand()的函数,但是不确定在这种情况下是否需要这样做。

3 个答案:

答案 0 :(得分:1)

尝试使用unnest软件包中的tidyr。这使您可以将列表中的每个元素转换为单独的行。假设您的数据帧称为df

df %>% unnest(data)

或者如果您想取消所有列的嵌套

df %>% unnest()

答案 1 :(得分:0)

我们可以将gsubtidyr::separate_rows一起使用

df %>%
    mutate(data = gsub("(c\\(|\\))", "", data)) %>%
    separate_rows(data)
#  Position data
#1 48575185    1
#2 48575150    3
#3 48604751    5
#4 48604673    3
#5 48604673    5
#6 48591918    2
#7 48591919    8

样本数据

df <- read.table(text =
    "Position   data
48575185    1
48575150    3
48604751    5
48604673    c(3,5)
48591918    2
48591919    8", header = T)

答案 2 :(得分:0)

我知道这个答案对游戏来说有点晚了,但这是一个data.table的实现:

library(data.table)
dt = data.table(Position = c(48575185, 48575150, 48604751, 48604673, 48591918, 48591919),
                data = list(1,3,5,c(3,5), 2,8) )
dt[,lapply(.SD, unlist),.SDcols = 'data', by = 'Position']