我有一个数据框,其中包含来自蝾螈内脏的各种节肢动物的长度和宽度.因为一些胆量有数千种特定的猎物,我只测量了每种猎物类型的一个子集.我现在想用这个猎物的平均长度和宽度替换每个未测量的个体.我想保留数据帧,只需添加推算列(length2,width2).主要原因是每行还有一些列,其中包含收集蝾螈的日期和位置的数据.我可以通过随机选择测量的个体填写NA,但为了论证,我们假设我只想用平均值替换每个NA.
例如,假设我有一个类似于以下内容的数据框:
id taxa length width
101 collembola 2.1 0.9
102 mite 0.9 0.7
103 mite 1.1 0.8
104 collembola NA NA
105 collembola 1.5 0.5
106 mite NA NA
Run Code Online (Sandbox Code Playgroud)
实际上,我有更多的列和大约25种不同的类群,总共约有30,000个猎物.似乎plyr包可能是理想的,但我无法弄清楚如何做到这一点.我不是很精通R或编程精通,但我正在努力学习.
并不是说我知道我在做什么,但如果有帮助,我会尝试创建一个小数据集.
exampleDF <- data.frame(id = seq(1:100), taxa = c(rep("collembola", 50), rep("mite", 25),
rep("ant", 25)), length = c(rnorm(40, 1, 0.5), rep("NA", 10), rnorm(20, 0.8, 0.1), rep("NA",
5), rnorm(20, 2.5, 0.5), rep("NA", 5)), width = c(rnorm(40, 0.5, 0.25), rep("NA", 10),
rnorm(20, 0.3, 0.01), rep("NA", 5), rnorm(20, 1, 0.1), rep("NA", 5)))
Run Code Online (Sandbox Code Playgroud)
以下是我尝试过的一些事情(没有用过): …
我正在编写一个函数来组合和组织数据,然后使用基数R中的并行函数并行运行MCMC链.我的函数如下.
dm100zip <- function(y, n.burn = 1, n.it = 3000, n.thin = 1) {
y <- array(c(as.matrix(y[,2:9]), as.matrix(y[ ,10:17])), c(length(y$Plot), 8, 2))
nplots <- nrow(y)
ncap1 <- apply(y[,1:8, 1],1,sum)
ncap2 <- apply(y[,1:8, 2],1,sum)
ncap <- as.matrix(cbind(ncap1, ncap2))
ymax1 <- apply(y[,1:8, 1],1,sum)
ymax2 <- apply(y[,1:8, 2],1,sum)
# Bundle data for JAGS/BUGS
jdata100 <- list(y=y, nplots=nplots, ncap=ncap)
# Set initial values for Gibbs sampler
inits100 <- function(){
list(p0=runif(1, 1.1, 2),
p.precip=runif(1, 0, 0.1),
p.day = runif(1, -.5, 0.1))
}
# Set parameters …Run Code Online (Sandbox Code Playgroud) 对不起,我想不出一个更具信息性的标题,但这是我的挑战.我有一个矩阵,我需要根据向量描述的参数在特定位置添加列.例如,如果我有以下矩阵:
1, 0, 1, 2, 0
0, 0, 1, 1, 1
1, 1, 0, 0, 0
2, 0, 1, 0, 2
Run Code Online (Sandbox Code Playgroud)
但对于特定的R包(未标记),我需要在特定位置添加NA列.我有一个与矩阵中的列相关的向量:
1, 1, 1, 2, 3
Run Code Online (Sandbox Code Playgroud)
这表明第1-3列来自相同的采样周期,第4列和第5列来自不同的采样周期.我需要使矩阵中的列数等于相同采样周期中的最大数量乘以采样周期数.在这种情况下,有三个1(向量中任何唯一值的最大数量)和总共三个采样周期(向量中的最大数量).所以我需要一个9列(3 x 3)的矩阵.具体来说,我需要在第4和第5列之后添加新的NAs列.基本上,我只需要的NA的列是占位符具有一个矩阵,其中观察(每列)的数量是相同的(= 3)为每个采样周期(在载体中通过数表示).这很难描述,但在这个想象的例子中,我想最终得到:
1, 0, 1, 2, NA, NA, 0, NA, NA
0, 0, 1, 1, NA, NA, 1, NA, NA
1, 1, 0, 0, NA, NA, 0, NA, NA
2, 0, 1, 0, NA, NA, 2, NA, NA
Run Code Online (Sandbox Code Playgroud)
这将由一个看起来像这样的矢量来描述:
1, 1, 1, 2, 2, 2, 3, 3, 3
Run Code Online (Sandbox Code Playgroud)
虽然我实际上并不需要生成那个矢量,只需要生成矩阵.显然,在这种情况下很容易添加这些列,但对于我的数据,我有一个更大的矩阵,最终会有~200列.另外,我可能不得不为大量数据集执行此操作.
任何人都可以帮我一个在R中编码的方法,这样我就可以自动化扩展矩阵的过程吗?
感谢您的任何建议或意见! …
我有一个相对较大的数据集(16,000 + x~31).换句话说,它足够大,我不想在Excel中逐行操作它.数据采用以下形式:
block site day X1 X2
1 1 1 0.4 5.1
1 1 2 0.8 1.1
1 1 3 1.1 4.2
1 2 1 ... ...
1 2 2
1 2 3
2 3 1
2 3 2
2 3 3
2 4 1
2 4 2
2 4 3
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,站点计数是连续的,但我想要一个列,其中站点编号与每个块重置.例如,我想要下面这样的东西:
block site day X1 X2 site2
1 1 1 0.4 5.1 1
1 1 2 0.8 1.1 1
1 1 3 1.1 4.2 1
1 2 1 …Run Code Online (Sandbox Code Playgroud) 我不太熟悉在R中使用list函数.这是我第一次使用矩阵列表.我试图从矩阵列表中的每个矩阵中删除相同的列,但我不确定它如何与R中的索引一起工作.
现在我在列表中有8个矩阵.每个矩阵是[120,56].我想从每个矩阵中删除行 17-40和49-56 行.因此,我最终得到了[120,24]的8个矩阵的列表.
这是我有一个矩阵列表的例子:
MatrixList <- list(maxT = matrix(1:56, 120, 56, byrow = TRUE),
minT = matrix(1:56, 120, 56, byrow = TRUE),
meanT = matrix(1:56, 120, 56, byrow = TRUE),
rain24 = matrix(1:56, 120, 56, byrow = TRUE),
rain5d = matrix(1:56, 120, 56, byrow = TRUE),
maxT2 = matrix(1:56, 120, 56, byrow = TRUE),
minT2 = matrix(1:56, 120, 56, byrow = TRUE),
meanT2 = matrix(1:56, 120, 56, byrow = TRUE))
Run Code Online (Sandbox Code Playgroud)
我知道这似乎是一个简单的问题,但我是一个新手,我只是不确定如何使用for循环和内部索引的组合来删除列.我宁愿学习如何有效地做到这一点,而不是单独为每个矩阵做这个,然后创建列表.
任何帮助,将不胜感激.谢谢!
我使用各种函数来拟合我的离散计数数据进行比较.我使用geepack,log(count)使用lme(nlme)的线性混合效果模型,使用glmer(lme4)的GLMM 和使用R中的GAMM gamm4(gamm4)来拟合GEE模型.
我有兴趣比较这些模型,并希望绘制一组新数据(预测变量)的预期(预测)值.我的目标是比较特定条件下每个模型的预测效果(x变量).特别感兴趣的是边际(GEE)和条件估计之间的比较.
我认为我的主要问题可能是使用正确的标签和属性等以正确的形式获取新数据.我仍然是一个R新手,并且很难与这些东西斗争(不幸的是,在我的大学没有这个课程).
我目前有适合的型号
gee1 lme1 lmer1 gamm1
Run Code Online (Sandbox Code Playgroud)
并且可以毫无问题地提取它们的固定效应系数和标准误差.我也没有问题从对数标度转换它们或估计考虑随机效应的置信区间.
我还有我的新数据框newdat,其中有23个变量的365个观测值(一年中每一天的平均环境数据).
我被困在如何从这预测新的计数估计.我玩了model.matrix函数,但无法使它工作.例如,我尝试过:
mm = model.matrix(terms(glmm1), newdat) # Error in model.frame.default(object,
# data, xlev = xlev) : object is not a matrix
newdat$pcount = mm %*% fixef(glmm1)
Run Code Online (Sandbox Code Playgroud)
任何建议或好的参考将不胜感激.有人可以帮助解决上面的错误吗?
我有一个数据帧
df <- data.frame(
id = c(1, 1, 1, 2, 2, 3, 3, 3, 3, 4),
date = c("1985-06-19", "1985-06-19", "1985-06-19", "1985-08-01",
"1985-08-01", "1990-06-19", "1990-06-19", "1990-06-19",
"1990-06-19", "2000-05-12"),
spp = c("a", "b", "c", "c", "d", "b", "c", "d", "a", "b"),
y = rpois(10, 5))
id date spp y
1 1 1985-06-19 a 6
2 1 1985-06-19 b 3
3 1 1985-06-19 c 7
4 2 1985-08-01 c 7
5 2 1985-08-01 d 6
6 3 1990-06-19 b 5
7 3 …Run Code Online (Sandbox Code Playgroud)