我正在运行代码来生成输出,我希望所有输出都打印1个小数位.但是代码使用了我一般使用的函数,我不想在这些函数中指定打印输出是四舍五入的.
这个问题的答案格式化R中的小数位数建议使用options(digits=2)
或round(x, digits=2)
.
第一个选项是一般设置,非常适合舍入1.234
到,1.2
但会打印12.345
为12
如果放在函数中但第二个选项可以工作,但我不想触摸它们.如何设置这一般?
df1=data.frame(c("male","female","male"),c("1","2","3","4","5","6"),seq(141,170))
names(df1) = c("gender","age","height")
df1$age <- factor(df1$age,
levels=c(1,2,3,4,5,6),
labels=c("16-24","25-34","35-44","45-54","55-64","65+"))
q1a=c(1,0,1,0,0,1);q1b=c(0,0,2,2,2,0);q1c=c(0,0,3,3,0,3) #1,2 and 3 used to be compatible with existing datasets. Could change all to 1 if necessary.
df2=data.frame(q1a=q1a,q1b=q1b,q1c=q1c); df1 <- cbind(df1,df2)
rm(q1a,q1b,q1c,df2)
Run Code Online (Sandbox Code Playgroud)
我希望复制R中SPSS的多个响应问题的分析.
目前我正在使用此代码:
#creating function for analysing questions with grouped data
multfreqtable <- function(a, b, c){
# number of respondents (for percent of cases)
totrep=sum(a==1|b==2|c==3)
#creating frequency table
table_a=data.frame("a",sum(a==1))
names(table_a)=c("question","freq")
table_b=data.frame("b",sum(b==2))
names(table_b)=c("question","freq")
table_c=data.frame("c",sum(c==3))
names(table_c)=c("question","freq")
table_question <-rbind(table_a,table_b,table_c)
#remove individual question tables
rm(table_a,table_b,table_c)
#adding total
total=as.data.frame("Total")
totalsum=(sum(table_question$freq,na.rm=TRUE))
totalrow=cbind(total,totalsum)
names(totalrow)=c("question","freq")
table_question=rbind(table_question,totalrow)
#adding …
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一些代码,用于标识每行的最大两个值,并提供其列号和值.
df = data.frame( car = c (2,1,1,1,0), bus = c (0,2,0,1,0),
walk = c (0,3,2,0,0), bike = c(0,4,0,0,1))
Run Code Online (Sandbox Code Playgroud)
我已经设法使用max
和max.col
函数来实现最大值.
df$max = max.col(df,ties.method="first")
df$val = apply(df[ ,1:4], 1, max)
Run Code Online (Sandbox Code Playgroud)
据我所知,第二个值没有相应的函数,所以这样做会让事情变得有点棘手.使用此代码提供第二高的值,但(重要的是)不提供有关系的情况.它看起来也很危险.
sec.fun <- function (x) {
max( x[x!=max(x)] )
}
df$val2 <- apply(df[ ,1:4], 1, sec.fun)
Run Code Online (Sandbox Code Playgroud)
理想情况下,该解决方案不会涉及删除任何原始数据,并且可用于查找第三,第四......最高值,但这些都不是基本要求.
#set working directory
setwd("C:/Bucky/Locations/London")
#open survey data
survey.data <- read.csv("01-London-Dataset.csv")
Run Code Online (Sandbox Code Playgroud)
我期待分析多个数据集,这些数据集包含不同位置的相同信息.每个数据集都与文件夹相关的其他文件一起保存在文件夹中.
文件名都采用相同的格式 - (01-London-Dataset.csv) - 文件夹中没有其他文件名包含数据集.
一旦设置了正确的工作目录,是否可以使用read.csv打开包含单词Dataset的文件?
我想总结一下类似于数据集包中的ToothGrowth数据的数据.
我想要的输出如下:
supp len half one two
1 OJ 619.9 132.3 227.0 260.6
2 VC 508.9 79.8 167.7 261.4
Run Code Online (Sandbox Code Playgroud)
这是按剂量和补充类型分开的长度之和.我的同事使用以下代码使用R版本2.15.1和plyr_1.7.1获取此输出.
library(datasets)
x <- ToothGrowth
test <- ddply(x,c("supp"),summarize,
len = sum(len,na.rm=TRUE),
half = sum(len[dose==0.5],na.rm=TRUE),
one = sum(len[dose==1],na.rm=TRUE),
two = sum(len[dose==2],na.rm=TRUE))
Run Code Online (Sandbox Code Playgroud)
ToothGrowth数据中没有NA,但真实数据集中有.
我得到以下输出R版本3.0.0和plyr_1.8.如果有用,我可以为两者提供完整的sessionInfo().
supp len half one two
1 OJ 619.9 619.9 0 0
2 VC 508.9 508.9 0 0
Run Code Online (Sandbox Code Playgroud)
这似乎没有出现错误.在我的数据中,我只有三个'剂量',但很多'补充类型'.如果半类中没有值,则将全部总和设为一个或两个.
有没有一种方法可以实现这一点,从而在版本类型中产生一致的输出?
谢谢你的帮助.