首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中csv循环和数据帧的倾弃

R中csv循环和数据帧的倾弃
EN

Stack Overflow用户
提问于 2014-07-15 15:55:43
回答 2查看 1.1K关注 0票数 1

使用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代码:

代码语言:javascript
复制
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]
                       }   
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-15 16:02:23

我建议在基本R中使用reshape()函数,而不是使用嵌套循环(或者根本不使用循环)。

代码语言:javascript
复制
abc <- read.csv("UG_inst_ALL.csv")
abc <- abc[2:4]

reshape(data = abc,
        v.names = "Freq",
        timevar = "Year",
        idvar = "UG_inst",
        direction = "wide")
票数 1
EN

Stack Overflow用户

发布于 2014-07-16 17:38:46

这被称为“重塑”您的数据,您正在从“长”格式到“宽”格式。

除了基本R的reshape函数之外,下面还有一些其他选项需要考虑。

我假设我们从数据开始,如下所示。

代码语言:javascript
复制
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

代码语言:javascript
复制
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“

代码语言:javascript
复制
library(reshape2)
head(dcast(abc, UG_inst ~ Year, value.var = "Freq"))

备选案文3:来自"tidyr“的spread

代码语言:javascript
复制
library(dplyr)
library(tidyr)
abc %>% select(-X) %>% group_by(UG_inst) %>% spread(Year, Freq)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24762795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档