【发布时间】:2020-11-14 14:00:22
【问题描述】:
我有一个要保存为 stata .dta 文件的数据框。 我尝试了避风港和外国包,但我得到了以下错误:
write_dta(df,"C:/Users/../df.dta")
我收到一个错误:
Error in write_dta_(data, normalizePath(path, mustWork = FALSE), version = stata_file_format(version), : Variables of type list not supported yet
和国外的包一样:
write.dta(df,"C:/Users/../df.dta")
或
write.dta(data = df,file = "C:/Users/../df.dta")
错误:
Error in write.dta(df, "C:/users/../df.dta") :
unknown data type
但是当我检查 df 是否确实是一个数据框时,我得到了 TRUE:
is.data.frame(df)
[1] TRUE
我想过使用writexl库并将其保存为xlsx,然后将其导入Stata:
write_xlsx(df,"C:/Users/../df.xlsx")
但在生成的 excel 文件中,所有计数列(请参见附图)都是空的。所以在 xlsx 文件中只填写了第 1 到第 4 列。所以我想知道我的计数列是否有问题。
由于我无法以简单的方式复制我的数据,我附上了一张图片:
根据@user20650 的建议,我运行了以下代码:
dput(tc[1:5, 3:6])
结果如下:
structure(list(filing_type = c("10-K", "10-K", "10-K", "10-K",
"10-K/A"), year = c("2014", "2013", "2012", "2011", "2010"),
Alabama_count = list(mktg_10k14.htm = 0L, mktg_10k.htm = 0L,
mktg_10k.htm = 0L, mktg_10k.htm = 0L, mktg_10ka.htm = 0L),
Alaska_count = list(mktg_10k14.htm = 0L, mktg_10k.htm = 0L,
mktg_10k.htm = 0L, mktg_10k.htm = 0L, mktg_10ka.htm = 0L)), row.names = c(NA,
5L), class = "data.frame")
正如@Andrew 建议的那样,我的计数列都是列表,而不是数据框。
【问题讨论】:
-
嘿,杰伊,看起来您有一个带有列表列的数据名(stata 没有本地方式来处理列表列,因此它无法导出具有该格式的列)。如果您运行
sapply(df, is.list)或sapply(df, typeof),它将帮助您识别问题列,以便您修复/导出。 -
这完全取决于列表的结构。这会返回什么?
all(sapply(df, function(x) all(lengths(x) == 1)))(检查是否有任何列表元素为空或长于 1)。 -
我们确实需要查看您的数据示例,您可以使用
dput(df[1:5, 3:6])来执行此操作(下注as.data.frame(lapply(df, unlist))可能就足够了) -
@jayjunior;是的,我可以看到图像,但是我们无法通过查看屏幕截图来判断数据的基本结构。如果您使用上一条评论中
dput(df[1:5, 3:6])的结果编辑您的问题,那应该足以了解结构。 -
谢谢@jayjunior;好吧,看起来
tc = as.data.frame(lapply(tc, unlist))或仅适用于受影响列的安德鲁斯解决方案就足够了。 (ps 最好大量使用str来昆虫您创建的对象,即str(tc)会拾取这个奇怪的嵌套结构。