我迭代地使模型适合许多不同的变量,在极少数情况下,我用作独立变量的两列包含一组相同的值。这使模型无法识别并引发错误。我想要一种方法来检查数据框中是否有任何其他列与其他任何列相同,然后返回有问题的列的名称。这是一个示例数据框。
a <- rnorm(10)
b <- rnorm(10)
c <- a
d <- rnorm(10)
dat <- data.frame(a,b,c,d)
Run Code Online (Sandbox Code Playgroud)
人们已经回答了如何测试,如果在数据帧的两个单独列是相同的位置。但是,我希望有一种方法可以将每列与其他列进行对照。
假设我在数据框中有一个data0和1的向量,如下所示:
v1<- c(0,0,1,1,0,1,0)
Run Code Online (Sandbox Code Playgroud)
我想要一个新的向量,其值为a或b,基于值v1是0还是1.此外,我希望第一个a为a1,第二个为a2.我希望第一个b是b1,第二个是b2,等等.输出矢量v2看起来像
c(a1,a2,b1,b2,a3,b3,a4)
Run Code Online (Sandbox Code Playgroud)
我知道我可以做一个简单的ifelse陈述
data$v2 <- ifelse(data$v1=0,'a','b')
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何在中添加递增整数.
我根据树木普查数据模拟树木死亡率.人们以不同的间隔外出,记录树木是否存在或死亡.我正在使用该coxph函数运行cox比例风险模型来分析树死亡概率作为几个预测变量的函数.代码如下:
model <- coxph(S ~ x1 + x2 + x3, data = data)
Run Code Online (Sandbox Code Playgroud)
然而,我的一个预测因子,树大小,实际上预计与死亡概率具有非线性关系.具体来说,树木在很小的时候死亡很多,死亡的概率随着它们到达"少年"阶段而下降并且是中等大小,然后随着树木变大和变大,死亡概率会逐渐增加.这在死亡概率和树大小之间创建了"逆J形"模式.它看起来像这样:

如何将这种非线性关系纳入coxph框架?如果无法做到这一点,我还能如何使用JAGS模型或其他方法分析R环境中的死亡概率?
我正在使用R 中包的gam函数将 gam 拟合到区间 (0,1) 上的数据mgcv。我的模型代码如下所示:
mod <- gam(y ~ x1 + x2 + s(latitude, longitude), faimly=betar(link='logit'), data = data)
Run Code Online (Sandbox Code Playgroud)
模型拟合得很好,但是当我绘制拟合值与观察值时,它看起来像这样:
plot(data$y ~ fitted(mod), ylab='observed',xlab='fitted')
Run Code Online (Sandbox Code Playgroud)
显然,该模型拟合了大于 1 且小于 0 的值。这不应该发生。它违反了 beta 分布的假设。当我betareg为 R的包中的相同数据建模时不会发生这种情况。什么可能导致这种差异?
我有一个 runjags 对象,它有两条混合得很好的链(链 1 和 3),还有一条混合得很好(链 2)。我怎样才能修剪 runjags 对象以仅包含链 1 和 3?
这是使用 runjags 生成 JAGS 模型的可重现示例(尽管这里的链混合得很好)。
library(runjags)
#generate the data
x <- seq(1,10, by = 0.1)
y <- x + rnorm(length(x))
#write a jags model
j.model = "
model{
#this is the model loop.
for(i in 1:N){
y[i] ~dnorm(y.hat[i], tau)
y.hat[i] <- m*x[i]
}
#priors
m ~ dnorm(0, .0001)
tau <- pow(sigma, -2)
sigma ~ dunif(0, 100)
}
"
#put data in a list.
data = list(y=y, x=x, N=length(y)) …Run Code Online (Sandbox Code Playgroud) 假设我编写了以下对象,一个等式,eqn.r使用R中的sprintf命令,根据输入向量进行求值,pizza:
eqn.r<- sprintf("sum((%s - mean(%s,na.rm=T))^2,na.rm=T)",pizza,pizza)
pizza<-c(1:10)
Run Code Online (Sandbox Code Playgroud)
当我输入eqn.rR控制台时,我得到了这个:
"sum((pizza - mean(pizza,na.rm=T))^2,na.rm=T)"
Run Code Online (Sandbox Code Playgroud)
我希望它实际评估,并打印这个:
> sum((pizza - mean(pizza,na.rm=T))^2,na.rm=T)
[1] 82.5
Run Code Online (Sandbox Code Playgroud) 假设我有一个文件,wassup.txt其行如下:
wassup
donut
skateboard
? teeth. !
Run Code Online (Sandbox Code Playgroud)
我想从第二行开始反转每一行的字符,然后保存为新文件pussaw.txt,其行将显示为:
wassup
tunod
skateboard
! .hteet ?
Run Code Online (Sandbox Code Playgroud)
理想情况下,解决方案只使用基本终端/ Unix函数,或者awk,perl或python.
我知道我可以用代码翻转每一行:
rev wassup.txt > pussaw.txt
Run Code Online (Sandbox Code Playgroud)
问题是如何只在第二行开始的每一行都执行此操作.
所以,假设我有两个数据集:
d1<- data.frame(seq(1:10),rnorm(10))
colnames(d1) <- c('id','x1')
d2<- data.frame(seq(3:7),rnorm(5))
colnames(d2) <- c('id','x2')
Run Code Online (Sandbox Code Playgroud)
现在,假设我想要一个新的数据集,d3即具有该d1值的数据id也存在于其中d2.我想使用一个非常简单的功能,例如:
d3 <- d1[id %in% d2$id]
Run Code Online (Sandbox Code Playgroud)
除了这是为我打印错误.什么是简单的衬垫才能实现这一目标?