我是R的新手,并尝试使用plyr包中的ddply和summary.这篇文章几乎,但不完全,回答了我的问题.我可以使用一些额外的解释/澄清.
我的问题:
我想创建一个简单的函数来按组分析给定变量的描述性统计.与链接的帖子不同,我想将感兴趣的变量作为函数的参数包含在内.正如本网站已经讨论的那样,这有效:
require(plyr)
ddply(mtcars, ~ cyl, summarise,
mean = mean(hp),
sd = sd(hp),
min = min(hp),
max = max(hp)
)
Run Code Online (Sandbox Code Playgroud)
但这不是:
descriptives_by_group <- function(dataset, group, x)
{
ddply(dataset, ~ group, summarise,
mean = mean(x),
sd = sd(x),
min = min(x),
max = max(x)
)
}
descriptives_by_group(mtcars, cyl, hp)
Run Code Online (Sandbox Code Playgroud)
由于我正在使用的数据量,我希望能够有一个函数,允许我指定我感兴趣的变量以及数据集和分组变量.
我试图编辑这里找到的各种解决方案来解决我的问题,但我不能很好地理解代码,以便成功地完成它.
原始海报使用以下示例数据集:
a = c(1,2,3,4)
b = c(0,0,1,1)
c = c(5,6,7,8)
df = data.frame(a,b,c)
sv = c("b")
Run Code Online (Sandbox Code Playgroud)
使用所需的输出:
b Ave
1 0 1.5
2 1 3.5 …Run Code Online (Sandbox Code Playgroud) 问题:
我有一个数据集,其中评估者列出了他们认为是噪声而不是信号的组件.因此,如果总共有八个组件,他们可能会生成一个类似"3,5,6"的列表,表明他们认为第三,第五和第六个组件是噪音,应该从进一步分析中排除.
为了便于我对interrater可靠性的分析,我需要能够对不同评估者创建的向量进行排列,并查看协议的位置; 所以,虽然"3,5,6"和"3,6"没有可比性,但像"0,0,3,0,5,6,0,0"和"0,0,3,0,0" ,6,0,0"将是,特别是一旦我将所有非零值转换为1.
我想知道是否有办法将序列从指定的最小值扩展到指定的最大值,用"0"或"NA"替换缺失值,这样给定:
xmin <- 1
xmax <- 8
x <- c(3,5,6)
Run Code Online (Sandbox Code Playgroud)
我可以产生类似的东西:
expand.x <- c(NA,NA,3,NA,5,6,NA,NA)
Run Code Online (Sandbox Code Playgroud)
该sequence命令与我想要的有一些相似之处,但并不完全相同.
就我的目的而言,没有必要实际保留原始向量中的值,所以
expand.x <- c(0,0,1,0,1,1,0,0)
Run Code Online (Sandbox Code Playgroud)
要么
expand.x <- c(FALSE,FALSE,TRUE,FALSE,TRUE,TRUE,FALSE,FALSE)
Run Code Online (Sandbox Code Playgroud)
对我来说同样适用,因为在这种格式中,位置数据概括了列表中的原始数值.我觉得这应该很简单,但我不确定从哪里开始解决这个问题.我怀疑将给定的矢量c(3,5,6)与完整序列进行比较的某种方式seq(xmin:xmax)是关键但是......没有想法.谢谢!
我正在研究一个出版的数字,并希望用一些beta和p值来注释它; 我所在区域的风格指南要求这些数字的格式不带前导零(例如,".003",而不是"0.003").我遇到了似乎是Catch-22的东西; 我从模型中提取了beta和p值,并进行了一些预处理以正确格式化它们,以便它们现在是字符而不是数字:
fake.beta.vals <- c(".53", ".29", ".14")
fake.p.vals <- c(".034", ".001", ".050")
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在我的图中使用这些值时,parse = TRUE将它们转回数值,失去我需要的格式.
fake.beta.vals <- c(".53", ".29", ".14")
fake.p.vals <- c(".034", ".001", ".050")
p <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width))
p <- p +
geom_smooth(method = "lm") +
geom_point() +
facet_wrap( ~ Species)
p
len <-length(levels(iris$Species))
vars <- data.frame(expand.grid(levels(iris$Species)))
colnames(vars) <- c("Species")
betalabs <- as.data.frame(fake.beta.vals)
plabs <- as.data.frame(fake.p.vals)
dat <- data.frame(
x = rep(7, len),
y = rep(4, len),
vars,
betalabs,
plabs)
dat$fake.beta.vals …Run Code Online (Sandbox Code Playgroud)