首页 > 解决方案 > 如何总计仅包含某些列的行

问题描述

所以我有一个基于 HR 数据培训的数据集,它询问技术和常见问题。

行代表员工,列代表他们在每个问题上获得的分数。这些列还包括人口统计数据。我只想查看技术和常见问题的总行数,而不包括人口统计数据。

techs<-grep("^T",rownames(dat))
commons<-grep("^C",rownames(dat))

我用它来尝试将列组合在一起,但是当我这样做时:

total<-rowsum(commons,techs) 

并尝试将其置于线性回归中:

Mod1Train<-lm(total~.,data=dat[Train,])

它说有不同的可变长度。

我是 R 的超级新手,如果我真的离开了,请提前道歉。

标签: r

解决方案


如果您提供数据样本,将来会非常有帮助。当我们猜测时,我们很难提供帮助。请参阅此链接https://stackoverflow.com/help/minimal-reproducible-example

话虽如此,大声笑并意识到你是新人,我会猜一猜……

让我们假装数据,我认为是你的一个较小的虚构版本......

set.seed(2020)
emplid <- 1:10
gender <- sample(c("Male", "Female"), size = 10, replace = TRUE)
Tech1 <- sample(10:20, size = 10, replace = TRUE)
Tech2 <- sample(10:20, size = 10, replace = TRUE)
Tech3 <- sample(10:20, size = 10, replace = TRUE)
Common1 <- sample(10:20, size = 10, replace = TRUE)
Common2 <- sample(10:20, size = 10, replace = TRUE)
Common3 <- sample(10:20, size = 10, replace = TRUE)
Kathryn <-  data.frame(emplid, gender, Tech1, Tech2, Tech3, Common1, Common2, Common3)
Kathryn
#>    emplid gender Tech1 Tech2 Tech3 Common1 Common2 Common3
#> 1       1 Female    10    17    15      18      17      15
#> 2       2 Female    17    13    11      20      11      13
#> 3       3   Male    17    11    19      18      10      12
#> 4       4 Female    19    16    15      14      15      16
#> 5       5 Female    11    13    20      20      16      13
#> 6       6   Male    15    11    17      19      17      13
#> 7       7   Male    11    13    11      15      14      11
#> 8       8 Female    12    14    10      11      17      19
#> 9       9 Female    11    13    15      18      11      10
#> 10     10 Female    17    20    12      12      14      15

如果您是新手,可能想花一些时间学习tidyverse这可以使这变得像这里一样简单有效地在 R 中的多个列中求和

根据您在评论中的注释,您有一个我们可以匹配的模式来总结问题。您的尝试很接近,grep但我们想要返回这些值,因此我们需要value = TRUE我们将存储和使用的值。

techqs <- grep(x = names(Kathryn), pattern = "^Tech", value = TRUE)
commonqs <- grep(x = names(Kathryn), pattern = "^Common", value = TRUE)
Kathryn$TechScores <- rowSums(Kathryn[,techqs])
Kathryn$CommonScores <- rowSums(Kathryn[,commonqs])

### Commented out how to do it manually.
# Kathryn$TechScores <- rowSums(Kathryn[,c("TQ1", "TQ2", "TQ3")])
# Kathryn$CommonScores <- rowSums(Kathryn[,c("CQ1", "CQ2", "CQ3")])

Kathryn$TotalScore <- Kathryn$TechScores + Kathryn$CommonScores

现在回归统计问题所在。你真的想从组件中预测总分吗???这并不难,r但它会导致愚蠢的答案。

Kathryn_model <- lm(formula = TotalScore ~ TechScores + CommonScores, data = Kathryn)
summary(Kathryn_model)
#> Warning in summary.lm(Kathryn_model): essentially perfect fit: summary may be
#> unreliable
#> 
#> Call:
#> lm(formula = TotalScore ~ TechScores + CommonScores, data = Kathryn)
#> 
#> Residuals:
#>        Min         1Q     Median         3Q        Max 
#> -3.165e-14 -1.905e-15  9.290e-16  8.590e-15  1.183e-14 
#> 
#> Coefficients:
#>               Estimate Std. Error   t value Pr(>|t|)    
#> (Intercept)  8.089e-14  6.345e-14 1.275e+00    0.243    
#> TechScores   1.000e+00  9.344e-16 1.070e+15   <2e-16 ***
#> CommonScores 1.000e+00  1.130e-15 8.853e+14   <2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 1.43e-14 on 7 degrees of freedom
#> Multiple R-squared:      1,  Adjusted R-squared:      1 
#> F-statistic: 9.875e+29 on 2 and 7 DF,  p-value: < 2.2e-16


推荐阅读