我有一个以下格式的数据框
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()的函数,但是不确定在这种情况下是否需要这样做。
答案 0 :(得分:1)
尝试使用unnest
软件包中的tidyr
。这使您可以将列表中的每个元素转换为单独的行。假设您的数据帧称为df
df %>% unnest(data)
或者如果您想取消所有列的嵌套
df %>% unnest()
答案 1 :(得分:0)
我们可以将gsub
与tidyr::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']