R 创建与原始数据框尺寸不同的新数据框

R 创建与原始数据框尺寸不同的新数据框,r,dataframe,R,Dataframe,我很难得到这个期望的输出。所以我有一个如下的数据框,其中有两列,一列是数字,另一列是标识符。但是,数字列表存储为一个字符。基本上,我只需要为列表中的每个数字设置一行,并使用正确的标识符。我尝试使用apply,对于每一行,我都能够创建数字列表和标识符的等长列表,但是apply返回的是包含两个列表的列表列表,我不知道如何轻松地将其转换为数据帧。任何帮助都将不胜感激 df = data.frame(type = "1", y = 'set(1,2,3,4)') desired_df = data.fr

我很难得到这个期望的输出。所以我有一个如下的数据框,其中有两列,一列是数字,另一列是标识符。但是,数字列表存储为一个字符。基本上,我只需要为列表中的每个数字设置一行,并使用正确的标识符。我尝试使用apply,对于每一行,我都能够创建数字列表和标识符的等长列表,但是apply返回的是包含两个列表的列表列表,我不知道如何轻松地将其转换为数据帧。任何帮助都将不胜感激

df = data.frame(type = "1", y = 'set(1,2,3,4)')
desired_df = data.frame(type = rep("1", len(list(1,2,3,4)), y = c(1,2,3,4))

将“set(…)”重新格式化为列表或向量后可能的处理方法:

1) 直接从向量

数据帧(type=“1”,y=1:4) 2) 从列表中创建数据帧,然后再旋转更长的时间

tidyr::pivot_更长(data.frame(type=“1”,y=list(1,2,3,4)),
cols=-type
)

3) 然后添加一个长度(或nrow)变量

如果数据是共享的,则可以使用
gsub
y
列中删除不必要的字符,然后使用
分隔行
获取长格式的数据

library(dplyr)

df %>%
  mutate(y = gsub('[set()]', '', y)) %>%
  tidyr::separate_rows(y, sep = ',', convert = TRUE)

#  type y
#1    1 1
#2    1 2
#3    1 3
#4    1 4

您好rangerfan2430,您的代码中有一个错误,您的意思是:
所需的_df=data.frame(type=rep(“1”,长度(列表(1,2,3,4))),y=c(1,2,3,4))