尝试获得所需的输出时遇到很多麻烦。因此,我有一个像下面这样的数据框,其中有两列带有数字列表和标识符。数字列表虽然存储为字符。基本上,对于列表中的每个数字,我只需要一行具有适当的标识符即可。我尝试使用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))
答案 0 :(得分:1)
如果共享数据,则可以使用y
从gsub
列中删除不必要的字符,然后使用separate_rows
来获取长格式的数据。
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
答案 1 :(得分:0)
将“ set(...)”重新格式化为列表或向量后,可能的处理方式:
1)直接来自矢量
data.frame(type = "1", y = 1:4)
2)从列表中创建数据框,然后再旋转一次
tidyr::pivot_longer( data.frame(type = "1", y = list(1, 2, 3, 4)),
cols = -type
)
3)然后添加一个长度(或nrow)变量