R 为clogit模型格式化数据
我做了一项调查,53名受访者分别回答了8个问题 目前,它位于Excel文档中,格式为: 人物#Q1 | Q2 | Q3 | Q4 | Q5 | Q6 | Q7 | Q8 每个问题都有三种可能的回答:“1”、“2”或“3”。对于给定的人,每个问题都有一个数字表示回答 我需要将每个人的答案转换成一个长列向量,其中三个选项的答案都用二进制编码。因此,对于每个人,应该有24行(每个问题3行),对于每个问题,应该有一行1(表示所做的选择),两行0 我曾在Excel和R中尝试过这样做,但如果不手动输入每个值,我就无法理解如何做到这一点R 为clogit模型格式化数据,r,excel,choice,R,Excel,Choice,我做了一项调查,53名受访者分别回答了8个问题 目前,它位于Excel文档中,格式为: 人物#Q1 | Q2 | Q3 | Q4 | Q5 | Q6 | Q7 | Q8 每个问题都有三种可能的回答:“1”、“2”或“3”。对于给定的人,每个问题都有一个数字表示回答 我需要将每个人的答案转换成一个长列向量,其中三个选项的答案都用二进制编码。因此,对于每个人,应该有24行(每个问题3行),对于每个问题,应该有一行1(表示所做的选择),两行0 我曾在Excel和R中尝试过这样做,但如果不手动输入每个值
请告诉我有更好的方法吗?请参见内联注释中的代码说明
子演示()
将wsSource设置为工作表
将wsDest设置为工作表
作为范围的Dim rSource
暗视范围
Dim vSource作为变量
我和我一样长,我和我一样长
“-->调整以满足您的需要
'设置源和目标引用
设置wsSource=工作表(“SourceData”)
设置wsDest=工作表(“DestData”)
“-->调整以满足您的需要
'假定源数据的标题在第1行,名称在A列,响应在B..I中
使用wsSource
设置rSource=.Range(.Cells(2,9),.Cells(.Rows.Count,1).End(xlUp))
以
“-->调整以满足您的需要
'假设生成的数据以单元格A1开始
Set rDest=wsDest.Cells(1,1)
'获取源数据
vSource=rSource.Value
'大小目标数据数组
ReDim vDest(1到UBound(vSource,1)*24,1到2)
'生成重新格式化的数据
对于每个人,i=1到UBound(vSource,1)”
对于j=1至24'添加人名
vDest((i-1)*24+j,1)=vSource(i,1)
下一个
对于j=1至8'代码8结果
vDest((i-1)*24+(j-1)*3+1,2)=IIf(v源(i,j+1)=1,1,0)
vDest((i-1)*24+(j-1)*3+2,2)=IIf(v源(i,j+1)=2,1,0)
vDest((i-1)*24+(j-1)*3+3,2)=IIf(v源(i,j+1)=3,1,0)
下一个
下一个
'将结果放在工作表上
rDest.Resize(UBound(vDest,1),UBound(vDest,2))=vDest
端接头
您是否考虑过使用VBA执行此操作?@chrisneilsen如果可以的话,我会的,但我可以手动键入所有内容,这样我就可以找出如何使用VBA执行此操作了,非常感谢!当我有机会真正理解如何复制类似的东西时,我将不得不深入研究这个问题。