[问题] R怎么做多组资料合并? (for循环问题)

楼主: askpeople (就是要问!!!)   2018-01-06 17:03:49
[软件程式类别]:R
[程式问题]:for循环不知道怎么写比较好?
[软件熟悉度]:新手
[问题叙述]:
我想问的是: 如果希望整栏的资料做多次合并,有办法用循环写吗?
现在有一个问卷资料,题项有22栏,是由7个系共185位同学填写
资料形态如下:
https://imgur.com/a/6gJdq
(每个题项一共有185笔资料、共23个题项、7个系的同学填答)
这题是复选题,我必须要统计出每个系回答题项的数目分布
1.要第1栏 (系所) + 第2栏 (题项1) = 1组资料
以此类推...一共有22组资料
2.将22组资料合并,就可以统计出每个系的题项分布,于是我用图法炼钢方式写了如 (1)
但重点来了,我要问的就是: 有办法用循环写吗? 但我用for循环写如下面 (2),
因为没写过整组资料的合并,不知道问题出在那? 可以帮我看一下吗?
(1) 图法炼钢 (确实可以正确合并,但花时间)
#data名称是data31
#1使用cbind合并...
r1 =cbind(data31[,1],data31[,2])
r2 =cbind(data31[,1],data31[,3])
r3 =cbind(data31[,1],data31[,4])
.....
r22 =cbind(data31[,1],data31[,23])
#2使用rbind合并,得到最后的rf大矩阵
rf = rbind(r1,r2,r3...r22)
(2) for循环 : 遇到问题
n = 22
r22 = matrix()
for (i in 1:n)
{
ri = cbind(data31[,1],data31[,i+1])
}
r22
因为这个是要把整组资料做合并,并非一个一个,所以我明知道循环有
问题,确不知道怎么改? 可以指点我一下吗? 我知道要给定一个矩阵让循环储存
可是我有22组,该怎么存起来?
作者: clansoda (小笨)   2018-01-06 17:11:00
有点看不懂,你们复选题这边不用boolean vector来存吗?
楼主: askpeople (就是要问!!!)   2018-01-06 17:15:00
楼上大大是说我的题项吗?不知道你指的是否是我的循环中的储存r22吗?
作者: clansoda (小笨)   2018-01-06 17:21:00
我是指分析的时候,你们都是中文的话可能会没那么好做如果用boolean vector存复选题的题项会比较好分析
楼主: askpeople (就是要问!!!)   2018-01-06 17:26:00
喔喔 了解了,你的意思是要我把中文字段改掉囉?
作者: clansoda (小笨)   2018-01-06 17:26:00
你的这种存法会有很多空格吧,到时候要分析的时候会困难重重,除非你只想知道总数或比例之类的
楼主: askpeople (就是要问!!!)   2018-01-06 17:27:00
然后选项尽量不要用中文我目前只是要统计出每个系在每个选项的数目分布而已
作者: clansoda (小笨)   2018-01-06 17:28:00
例如说你有一个复选题有20个选项 你就把column设成
楼主: askpeople (就是要问!!!)   2018-01-06 17:28:00
这篇文章的重点就是循环写法不知怎么改
楼主: askpeople (就是要问!!!)   2018-01-06 17:29:00
好,我会参考你说的 感谢
作者: celestialgod (天)   2018-01-06 19:01:00
R的stack不就可以直接完成吗....或是reshape2,data.table的melt
楼主: askpeople (就是要问!!!)   2018-01-06 20:56:00
对于r没很熟悉 所以套件不太清楚@@ 我去研究一下
作者: clsmbstu   2018-01-07 01:08:00
reshape2::melt(data31, "系所")
楼主: askpeople (就是要问!!!)   2018-01-07 11:29:00
很感谢上面的几位大大指点指令与套件如果说我想练习循环,也是有办法写吗?
作者: clsmbstu   2018-01-07 12:54:00
我想问题是出在 ri = cbind(data31[,1],data31[,i+1])R会以为你要把每次cbind的结果都存到叫"ri"的东西assign(paste0("r",i),cbind(data31[,1],data31[,i+1]))这样写才会每次把结果存进不同的variable 之后才能操弄不过等你学会lapply等function以后 应该会更喜欢把这些类似格式的资料(例如rXX)全部整理进一个list 更方便
楼主: askpeople (就是要问!!!)   2018-01-10 12:14:00
之后我想把产生的r1,...r22合并 尝试用以下写法:r = paste0("r",1:22) 然后lapply(r, rbind)现在是希望把r1..r22塞到cbind里面,可想不出好的方式我自己已经用melt处理过,但想增强写循环的能力 (Orz)
作者: celestialgod (天)   2018-01-10 18:33:00
能不用循环就不要用循环...而且你好像没分清楚变量名称跟字串差异= =
楼主: askpeople (就是要问!!!)   2018-01-11 09:31:00
我用paste0这样,发现变成字串"r1"..所以不知道怎么办而assign我了解了一下,知道是给变量一个数值

Links booklink

Contact Us: admin [ a t ] ucptt.com