假设有一个myfile.csv,第一行包含变量名,后面包含十进制数.在Matlab中我想分别读取标题行和十进制数.到目前为止,我一直在做以下提取标题行:
fid = fopen('myfile.csv');
a = textscan(fid,'%s','Delimiter','\n');
b = a{1,1};
fclose(fid);
c = textscan(b,'%s','Delimiter',',');
d = c{1}
Run Code Online (Sandbox Code Playgroud)
然后,我使用csvread命令提取文件的数字部分.但应该有一个(更简单)的方法来做到这一点!首先,我不想读取整个文件(如同a = textscan(fid,'%s','Delimiter','\n');)只提取第一行.其次,使用7行代码看起来是错误的 - 可以用更少的代码完成吗?
我会感谢任何建设性的建议.
有人可以通过以下示例帮助我理解aggregate和ddply之间的区别:
数据框:
mydat <- data.frame(first = rpois(10,10), second = rpois(10,10),
third = rpois(10,10), group = c(rep("a",5),rep("b",5)))
Run Code Online (Sandbox Code Playgroud)
使用aggregate将函数应用于按因子分割的数据框的一部分:
aggregate(mydat[,1:3], by=list(mydat$group), mean)
Group.1 first second third
1 a 8.8 8.8 10.2
2 b 6.8 9.4 13.4
Run Code Online (Sandbox Code Playgroud)
尝试将聚合用于另一个函数(返回错误消息):
aggregate(mydat[,1:3], by=list(mydat$group), function(u) cor(u$first,u$second))
Error in u$second : $ operator is invalid for atomic vectors
Run Code Online (Sandbox Code Playgroud)
现在,尝试使用ddply(plyr包):
ddply(mydat, .(group), function(u) cor(u$first,u$second))
group V1
1 a -0.5083042
2 b -0.6329968
Run Code Online (Sandbox Code Playgroud)
所有提示,链接,批评都非常感谢.
在R中,假设存在包括自变量"组"(两组)和n个因变量的数据帧"mydata".我想运行n个t-tests(每个因变量一个),通过执行以下操作打印并将结果保存到文件中:
variables<-names(mydata)
variables<-variables[-1] #to remove the group variable
capture.output(for(i in variables){print(t.test(get(paste("mydata$", i, sep=""))~mydata$group))},file="outputfile.txt")
Run Code Online (Sandbox Code Playgroud)
此命令返回以下错误消息:
Error in get(paste("mydata$", i, sep = "")) : object 'mydata$variable1' not found
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?