使用R语言qualtRics包调用Qualtrics API仅获列无行数据问题
问题:qualtRics fetch_survey仅返回列结构无数据行
使用qualtRics包拉取调查数据时,进度条显示完成,但返回的tibble只有18列却0行数据,实际该调查有1200条响应记录。
可能的原因及解决方法
1. 默认过滤规则排除了所有响应
fetch_survey默认会过滤出已完成的响应(filter = "Finished == 'True'"),如果你的调查响应大多是未完成、被标记为垃圾或部分完成的,就会出现0行结果。
解决:取消过滤规则,拉取所有响应:
ema_survey <- fetch_survey(surveyID = surveys$id[6], filter = NULL)
或者指定包含未完成响应的过滤条件:
# 拉取所有状态的响应 ema_survey <- fetch_survey(surveyID = surveys$id[6], filter = "Status != ''")
2. 调查ID匹配错误
确认surveys$id[6]对应的是你目标调查的ID,all_surveys()返回的列表顺序可能和Qualtrics网页端的显示顺序不一致。
解决:查看所有调查的名称与ID对应关系:
View(surveys)
找到目标调查的名称,核对对应的ID后再传入fetch_survey。
3. 缓存导致的旧数据
如果之前拉取过该调查的空数据,qualtRics可能会使用缓存结果,而不是重新请求最新数据。
解决:强制跳过缓存,重新请求:
ema_survey <- fetch_survey(surveyID = surveys$id[6], force_request = TRUE)
4. API权限不足
虽然能通过all_surveys()获取调查列表,但你的API密钥对应的账号可能没有查看该调查响应数据的权限(比如调查是团队共享的,但未给你数据访问权限)。
解决:登录Qualtrics网页端,确认当前账号能查看目标调查的响应数据;或者联系管理员调整API账号的权限。
5. 数据读取/转换异常
少数情况下,响应数据中的特殊字符或格式问题会导致转换为tibble时丢失行数据。
解决:先拉取原始JSON数据,检查是否存在响应记录:
raw_data <- fetch_survey(surveyID = surveys$id[6], convert = FALSE) # 查看原始数据中的响应数量 length(raw_data$result$responses)
如果原始数据里有响应,再尝试手动转换为数据框:
library(dplyr) ema_survey <- bind_rows(raw_data$result$responses)
内容的提问来源于stack exchange,提问作者Pss
相关产品推荐
相关产品推荐

