R语言导出DataFrame中stim变量至TXT时显示numeric而非实际值的问题
问题解决方法
你的问题出在mydata$stim是嵌套的命名数值向量列,直接print()只会输出它的数据类型,不会展开内部的键值对。以下是修正后的代码,能生成你需要的格式:
修正后的导出代码
# 加载必要包 library(tidyverse) # 生成每个被试的输出内容 output_lines <- map2_chr( .x = mydata$stim, .y = str_pad(row_number(mydata), width = 3, pad = "0"), # 生成001、002格式的编号 .f = function(stim_data, subj_id) { # 先写被试编号 lines <- c(subj_id) # 遍历stim的键值对,生成"键 值"格式的行 for (name in names(stim_data)) { lines <- c(lines, paste(name, stim_data[[name]])) } # 每个被试的内容用换行连接 paste(lines, collapse = "\n") } ) # 把所有内容合并成一个字符串,写入文件 writeLines(paste(output_lines, collapse = "\n\n"), "mydata.txt")
关键说明
str_pad(row_number(mydata), 3, "0"):自动生成三位带前导零的被试编号,对应你要的001格式。map2_chr:同时遍历stim列和被试编号,逐个处理每个被试的内容。- 遍历
stim_data的名称,把每个键和对应的值拼接成字符串,再和编号组合。 writeLines比sink()更适合这种自定义格式的文本输出,避免额外的打印格式干扰。
排查注意点
如果运行后还是有问题,先检查mydata$stim的结构:
# 查看第一个被试的stim结构 str(mydata$stim[[1]])
如果输出是 Named num [1:...]开头,说明是命名数值向量,上面的代码完全适用;如果是其他结构(比如数据框),可以调整循环部分的取值方式。
内容的提问来源于stack exchange,提问作者thefriendly_plague.doctor
相关产品推荐
相关产品推荐

