使用R,我试图获取一个csv文件,循环它,提取值,并将它们转储到数据框中 . csv中有四列:ID,UG_inst,Freq和Year . 具体来说,我希望每年按机构名称(2010-11,2011-12,2012-13和2013-14)遍历UG_inst列,并将该单元格的值放入R中的相应“单元格”中数据框 . 现在,csv只有一个Year列,但我创建的数据框每年都有一列 . 最终的想法是能够创建表示每个机构每年频率的条形图 . 目前,下面的代码抛出NO错误,但似乎对R数据帧“j”没有任何作用 .
一些警告:1)做一个嵌套的for循环让我的头旋转,所以我决定现在只使用2010-11并且只是循环通过机构名称 . 由于只有4年,我可以重写这四次,每次都有不同的年份 . 2)此外,在csv中,有重复的名称 . 因此,如果机构名称出现两次(由于按字母顺序排列将在csv中相邻的行),有没有办法将这些的SUM转储到R中的数据框中?
所有相关信息如下 . 非常感谢任何帮助!!!!
以下是.csv文件的链接:https://www.dropbox.com/s/9et7muchkrgtgz7/UG_inst_ALL.csv
这是我正在尝试的R代码:
abc <- read.csv(insert file path to above csv here)
inst_string <- unique(abc$UG_inst)
j <- data.frame("UG_inst"=inst_string,"2010-11"=NA,"2011-12"=NA,"2012-13"=NA,"2013-14"=NA)
for (i in inst_string) {
inst.index <- which(abc$UG_inst == i && abc$Year == "2010-11")
j$X2010.11[j$Ug_inst==i] <- abc$Freq[inst.index]
}
2 回答
我建议使用基础R中的
reshape()
函数,而不是使用嵌套循环(或根本不使用循环) .这被称为“重塑”您的数据,您将从“长”格式转变为“宽”格式 .
除了基础R的
reshape
功能之外,还有一些其他选项需要考虑 .我假设我们开始读取数据,如下所示 .
选项1:xtabs
选项2:来自“reshape2”的dcast
选项3:从“tidyr”传播