鉴于data.table如下:
library(data.table)
set.seed(100)
dt <- data.table(a=c(1:3, 1), b = c(1,0,1, 3), c = c(1,2,1,3), x = rnorm(4), y = rnorm(4), d = c(4, 6, 6, 7))
Run Code Online (Sandbox Code Playgroud)
dt 返回,
a b c x y d
1: 1 1 1 -0.50219235 0.1169713 4
2: 2 0 2 0.13153117 0.3186301 6
3: 3 1 1 -0.07891709 -0.5817907 6
4: 1 3 3 0.88678481 0.7145327 7
Run Code Online (Sandbox Code Playgroud)
列"a","b"和"c"中等于3的任何数字都将为TRUE
此外,列"d"中等于6的任何数字都将为TRUE
如何dt使用列名称("a","b","c"和"d")评估内部
所以我的回报是:
a b c x y d
1: FALSE FALSE FALSE -0.50219235 0.1169713 …Run Code Online (Sandbox Code Playgroud) 我正在尝试对响应变量介于 0 和 1 之间的数据进行建模,因此我决定在 R 中使用分数响应模型。根据我目前的理解,分数响应模型类似于逻辑回归,但它使用了 quasi-确定参数的似然法。我不确定我是否理解正确。
到目前为止,我尝试的是frmfrom 包frm和glm以下数据,与此OP相同
library(foreign)
mydata <- read.dta("k401.dta")
Run Code Online (Sandbox Code Playgroud)
此外,我遵循了这个OP中glm使用的程序。但是,对于相同的数据集frm,它返回不同的 SE
library(frm)
y <- mydata$prate
x <- mydata[,c('mrate', 'age', 'sole', 'totemp1')]
myfrm <- frm(y, x, linkfrac = 'logit')
Run Code Online (Sandbox Code Playgroud)
frm 返回,
*** Fractional logit regression model ***
Estimate Std. Error t value Pr(>|t|)
INTERCEPT 1.074062 0.048902 21.963 0.000 ***
mrate 0.573443 0.079917 7.175 0.000 ***
age 0.030895 0.002788 11.082 0.000 ***
sole …Run Code Online (Sandbox Code Playgroud) 假设我有以下内容
dt <- data.table(a=c(T,T,F,F), b= c(T,F,T,F))
Run Code Online (Sandbox Code Playgroud)
返回,
a b
1: TRUE TRUE
2: TRUE FALSE
3: FALSE TRUE
4: FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用function(x) min(which(x))来确定TRUE中每一行的第一行dt,但没有奏效。我期望的结果将是
a b index
1: TRUE TRUE 1
2: TRUE FALSE 1
3: FALSE TRUE 2
4: FALSE FALSE 9999
Run Code Online (Sandbox Code Playgroud)
,其中索引列表示第一个的位置,TRUE当该行仅包含 FALSE 时使用 9999
仅供参考:在真实数据中,我有大约 50 列包含 TRUE 和 FALSE
你能给我建议吗?
重新发布到这篇文章,我创建了一个在data.table包上进行线性回归的例子,如下所示:
## rm(list=ls()) # anti-social
library(data.table)
set.seed(1011)
DT = data.table(group=c("b","b","b","a","a","a"),
v1=rnorm(6),v2=rnorm(6), y=rnorm(6))
setkey(DT, group)
ans <- DT[,as.list(coef(lm(y~v1+v2))), by = group]
Run Code Online (Sandbox Code Playgroud)
返回,
group (Intercept) v1 v2
1: a 1.374942 -2.151953 -1.355995
2: b -2.292529 3.029726 -9.894993
Run Code Online (Sandbox Code Playgroud)
我能够获得lm函数的系数.
我的问题是:
我们如何直接用于predict新的观察?如果我们有新的观察结果如下:
new <- data.table(group=c("b","b","b","a","a","a"),v1=rnorm(6),v2=rnorm(6))
Run Code Online (Sandbox Code Playgroud)
我试过了:
setkey(new, group)
DT[,predict(lm(y~v1+v2), new), by = group]
Run Code Online (Sandbox Code Playgroud)
但它给我带来了奇怪的答案:
group V1
1: a -2.525502
2: a 3.319445
3: a 4.340253
4: a 3.512047
5: a 2.928245
6: a 1.368679 …Run Code Online (Sandbox Code Playgroud) 假设我们有
library(data.table)
dt <- data.table(Date = c(201405,201405,201504,201505, 201505,201505), ID = c(500,500,600,700,500, 700), INC = c(20,30,50,75,80,90))
Run Code Online (Sandbox Code Playgroud)
返回,
Date ID INC
1: 201405 500 20
2: 201405 500 30
3: 201504 600 50
4: 201505 700 75
5: 201505 500 80
6: 201505 700 90
Run Code Online (Sandbox Code Playgroud)
我要删除同一日期中的所有ID。回报应该是
Date ID INC
1: 201504 600 50
2: 201505 500 80
Run Code Online (Sandbox Code Playgroud)
你能建议吗?
我有以下数据
set.seed(5)
dt <- data.table(ID=letters, x = rnorm(26), y = rnorm(26), z = c(rep(15, 13), rep(20,13)))
Run Code Online (Sandbox Code Playgroud)
返回,
ID x y z
1: a -0.84085548 1.41858907 15
2: b 1.38435934 1.49877383 15
3: c -1.25549186 -0.65708209 15
4: d 0.07014277 -0.85279544 15
5: e 1.71144087 0.31591504 15
6: f -0.60290798 1.10969417 15
7: g -0.47216639 2.21546057 15
8: h -0.63537131 1.21710364 15
9: i -0.28577363 1.47922179 15
10: j 0.13810822 0.95157383 15
11: k 1.22763034 -1.00953265 15
12: l -0.80177945 -2.00047274 …Run Code Online (Sandbox Code Playgroud)