使用R,我试图获取一个csv文件,循环它,提取值,并将它们转储到一个数据帧中。csv中有四列: ID、UG_inst、Freq和年份。具体来说,我想按机构名称(2010-11、2011-12、2012-13和2013-14)遍历UG_inst列,并将该单元格的值放入R数据框架中各自的“单元格”中。现在,csv只有一个年份列,但是我创建的数据框架中每年都有一个列。最终的想法是能够创建代表每个机构每年的频率的条形图。目前,下面的代码没有抛出错误,但似乎对R数据框架"j“没有任何作用。
几个注意事项: 1)做一个嵌套的for循环会使我的头旋转,所以我决定现在只使用2010-11,然后循环通过机构名称。因为只有4年,我可以重写这四次,每次用不同的一年。2)此外,在csv中也有重复的名称。那么,如果一个机构名称出现了两次(由于字母顺序,在csv中将是相邻的行),那么是否有方法将它们的和转储到R中的数据帧中?
所有相关信息如下。非常感谢您的帮助!
下面是指向.csv文件的链接: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]
} 发布于 2014-07-15 16:02:23
我建议在基本R中使用reshape()函数,而不是使用嵌套循环(或者根本不使用循环)。
abc <- read.csv("UG_inst_ALL.csv")
abc <- abc[2:4]
reshape(data = abc,
v.names = "Freq",
timevar = "Year",
idvar = "UG_inst",
direction = "wide")发布于 2014-07-16 17:38:46
这被称为“重塑”您的数据,您正在从“长”格式到“宽”格式。
除了基本R的reshape函数之外,下面还有一些其他选项需要考虑。
我假设我们从数据开始,如下所示。
abc <- read.csv("~/Downloads/UG_inst_ALL.csv", row.names = 1)
head(abc)
# UG_inst Freq Year
# 1 Abilene Christian University 0 2010-11
# 2 Adams State University 0 2010-11
# 3 Adrian College 1 2010-11
# 4 Agnes Scott College 0 2010-11
# 5 Alabama A&M University 1 2010-11
# 6 Albion College 1 2010-11备选案文1:xtabs
out <- as.data.frame.matrix(xtabs(Freq ~ UG_inst + Year, abc))
head(out)
# 2010-11 2011-12 2012-13 2013-14
# Abilene Christian University 0 1 0 0
# Adams State University 0 0 0 1
# Adrian College 1 0 0 0
# Agnes Scott College 0 0 1 0
# Alabama A&M University 1 3 1 2
# Albion College 1 0 0 0选项2:“dcast”中的"reshape2“
library(reshape2)
head(dcast(abc, UG_inst ~ Year, value.var = "Freq"))备选案文3:来自"tidyr“的spread
library(dplyr)
library(tidyr)
abc %>% select(-X) %>% group_by(UG_inst) %>% spread(Year, Freq)https://stackoverflow.com/questions/24762795
复制相似问题