标签: r-factor

R:因子水平,重新编码为'其他'

我使用的因素很少,并且通常会发现它们易于理解,但我常常对特定操作的细节模糊不清.目前,我正在编写/折叠类别,几乎没有观察到"其他",我正在寻找一个快速的方法来做到这一点 - 我有一个或许20级的变量,但我有兴趣将它们中的一堆折叠成一个.

data <- data.frame(employees = sample.int(1000,500),
                   naics = sample(c('621111','621112','621210','621310','621320','621330','621340','621391','621399','621410','621420','621491','621492','621493','621498','621511','621512','621610','621910','621991','621999'),
                                  100, replace=T))
Run Code Online (Sandbox Code Playgroud)

以下是我感兴趣的级别,以及它们在不同向量中的标签.

#levels and labels
top8 <-c('621111','621210','621399','621610','621330',
         '621310','621511','621420','621320')
top8_desc <- c('Offices of physicians',
               'Offices of dentists',
               'Offices of all other miscellaneous health practitioners',
               'Home health care services',
               'Offices of Mental Health Practitioners',
               'Offices of chiropractors',
               'Medical Laboratories',
               'Outpatient Mental Health and Substance Abuse Centers',
               'Offices of optometrists')
Run Code Online (Sandbox Code Playgroud)

我可以使用该factor()调用,将它们全部枚举,每次类别几乎没有观察时将其分类为"其他".

假设上面top8top8_desc上面是实际的前8位,那么声明data$naics为因子变量的最佳方法是什么,以便对值进行相应top8的编码并将其他所有内容重新编码为other

r r-factor

11
推荐指数
2
解决办法
3982
查看次数

来自ggplot2的geom_boxplot():强制显示空白级别

我找不到一种方法来让ggplot2在一个boxplot中显示一个空的级别,而不会将我的数据帧与实际的缺失值相混淆.这是可重现的代码:

# fake data
dftest <- expand.grid(time=1:10,measure=1:50)
dftest$value <- rnorm(dim(dftest)[1],3+0.1*dftest$time,1)

# and let's suppose we didn't observe anything at time 2

# doesn't work even when forcing with factor(..., levels=...)
p <- ggplot(data=dftest[dftest$time!=2,],aes(x=factor(time,levels=1:10),y=value))
p + geom_boxplot()

# only way seems to have at least one actual missing value in the dataframe
dftest2 <- dftest
dftest2[dftest2$time==2,"value"] <- NA
p <- ggplot(data=dftest2,aes(x=factor(time),y=value))
p + geom_boxplot()
Run Code Online (Sandbox Code Playgroud)

所以我想我错过了一些东西.在处理平衡实验时,这不是问题,因为这些缺失数据可能在数据帧中是明确的.但是,例如,在一个队列中观察到的数据,这意味着对未观察到的组合缺少值的数据进行估算...感谢您的帮助.

r ggplot2 boxplot r-factor

10
推荐指数
1
解决办法
6979
查看次数

逐行选择因子

我有一个数据框,df2包含factor按照我想要分组的ID分组的观察结果.我已经使用另一个函数来识别我想要选择的每个因子组中的哪些行.这显示在下面df:

df <- data.frame(ID = c("A","B","C"),
                 pos = c(1,3,2))
df2 <- data.frame(ID = c(rep("A",5), rep("B",5), rep("C",5)),
                  obs = c(1:15))
Run Code Online (Sandbox Code Playgroud)

df,pos对应于我想要在所提到的因子级别内选择的行的索引ID,而不是在整个数据帧中df2.我正在寻找一种方法来ID根据正确的索引为每个行选择行(所以它们的行号在每个因素的水平内df2).

所以,在这个例子中,我要选择的第一个值df2ID == 'A'在第三值df2ID == 'B'和第二个值df2ID == 'C'.

这会给我:

df3 <- data.frame(ID = c("A", "B", "C"),
                  obs = c(1, 8, 12))
Run Code Online (Sandbox Code Playgroud)

r subset r-factor

10
推荐指数
3
解决办法
3855
查看次数

计算r中的独特因素

我想知道在记录的每个出生日期分娩的独特水坝的数量.我的数据框与此类似:

dam <- c("2A11","2A11","2A12","2A12","2A12","4D23","4D23","1X23")
bdate <- c("2009-10-01","2009-10-01","2009-10-01","2009-10-01",
           "2009-10-01","2009-10-03","2009-10-03","2009-10-03")
mydf <- data.frame(dam,bdate)
mydf
#    dam      bdate
# 1 2A11 2009-10-01
# 2 2A11 2009-10-01
# 3 2A12 2009-10-01
# 4 2A12 2009-10-01
# 5 2A12 2009-10-01
# 6 4D23 2009-10-03
# 7 4D23 2009-10-03
# 8 1X23 2009-10-03
Run Code Online (Sandbox Code Playgroud)

我曾经使用aggregate(dam ~ bdate, data=mydf, FUN=length)但它计算了在特定日期生下的所有水坝

bdate dam
1 2009-10-01   5
2 2009-10-03   3
Run Code Online (Sandbox Code Playgroud)

相反,我需要这样的东西:

mydf2
  bdate      dam
1 2009-10-01  2
2 2009-10-03  2
Run Code Online (Sandbox Code Playgroud)

非常感激您的帮忙!

r unique r-factor

9
推荐指数
2
解决办法
9445
查看次数

如何将离散因子水平视为连续?

我有一个数据框,其中列最初标记为任意.稍后,我想将这些级别更改为数值.以下脚本说明了该问题.

library(ggplot2)
library(reshape2)

m <- 10
n <- 6

nam <- list(c(),letters[1:n])
var <- as.data.frame(matrix(sort(rnorm(m*n)),m,n,F,nam))
dtf <- data.frame(t=seq(m)*0.1, var)
mdf <- melt(dtf, id=c('t'))

xs <- c(0.25,0.5,1.0,2.0,4.0,8.0)
levels(mdf$variable) <- xs

g <- ggplot(mdf,aes(variable,value,group=variable,colour=t))
g +
    geom_point() +
    #scale_x_continuous() +
    opts()
Run Code Online (Sandbox Code Playgroud)

这个图是产生的.

在此输入图像描述

'变量'量在图上均匀分布,即使在数字上这不是真的.如何才能使x轴上的间距正确?

r ggplot2 dataframe r-factor

9
推荐指数
2
解决办法
4万
查看次数

在R中选择哪个级别是lm回归中的因子的基本类别的最佳方式

假设我想使用lmfactor作为右侧变量运行回归.选择因子中哪个级别为基本类别(排除以避免多重共线性的级别)的最佳方法是什么.请注意,我对排除拦截不感兴趣,因为我有很多因素.

我还想要一个基于公式的解决方案,而不是直接作用于data.frame的解决方案,尽管如果你认为你有一个非常好的解决方案,请发布它.

我的解决方案是:

base_cat <- function(x) c(x,1:(x-1),(x+1):100) 
a_reg <- lm(y ~ x1 + x2 + factor(x3, levels=base_cat(30)) #suppose that x3 has draws from the integers 1 to 100.
Run Code Online (Sandbox Code Playgroud)

左边的类别lm是因子中的第一个级别,因此这只是重新排序级别,以便指定的级别是第一个级别base_cat(),然后将其余级别放在后面.

还有其他想法吗?

r lm r-factor

9
推荐指数
1
解决办法
1770
查看次数

按NA级别设置一个因子

我在R中有一个因子,具有NA水平.

set.seed(1)
x <- sample(c(1, 2, NA), 25, replace=TRUE)
x <- factor(x, exclude = NULL)
> x
 [1] 1    2    2    <NA> 1    <NA> <NA> 2    2    1    1   
[12] 1    <NA> 2    <NA> 2    <NA> <NA> 2    <NA> <NA> 1   
[23] 2    1    1   
Levels: 1 2 <NA>
Run Code Online (Sandbox Code Playgroud)

如何按<NA>级别对该因子进行子集化?我试过的两种方法都行不通.

> x[is.na(x)]
factor(0)
Levels: 1 2 <NA>
> x[x=='<NA>']
factor(0)
Levels: 1 2 <NA>
Run Code Online (Sandbox Code Playgroud)

r subset missing-data na r-factor

9
推荐指数
1
解决办法
1695
查看次数

线性模型(lm),因变量是因子/分类变量

我想用lm函数进行线性回归(或者另一个,如果有效的话).我的因变量是一个叫做的因子AccountStatus:

拖欠1:0天,拖欠2:30-60天,拖欠3:60-90天,拖欠4:90天.(4)

作为独立变量,我有几个数字变量:贷款到价值,债务到收入和利率.

是否可以使用这些变量进行线性回归?我在互联网上看到了一些关于假人的东西,但这些都是针对自变量的.

这不起作用:

fit <- lm(factor(AccountStatus) ~ OriginalLoanToValue, data=mydata)
summary(fit)
Run Code Online (Sandbox Code Playgroud)

r lm r-factor

9
推荐指数
1
解决办法
2万
查看次数

按数据集中出现的顺序排列因子级别

我有一项调查,其中必须为问题分配唯一的ID.有些问题多次出现.这意味着还有一层额外的问题.在下面的示例数据中,仅包括第一层.

问题:如何按出现顺序分配唯一索引?此处提供的解决方案按字母顺序排列 我可以订购这些因素,但这会破坏在R中实现它的目的[有很多问题需要排序].

library(data.table)
dt = data.table(question = c("C", "C", "A", "B", "B", "D"), 
                value = c(10,20,30,40,20,30))

dt[, idx := as.numeric(as.factor(question))]
Run Code Online (Sandbox Code Playgroud)

得到:

  question value idx
# 1:        C    10   3
# 2:        C    20   3
# 3:        A    30   1
# 4:        B    40   2
# 5:        B    20   2
# 6:        D    30   4

# but required is:
dt[, idx.required := c(1, 1, 2, 3, 3, 4)]
Run Code Online (Sandbox Code Playgroud)

r r-factor data.table

9
推荐指数
2
解决办法
1611
查看次数

如何使数据框中的因子级别在所有列中保持一致?

我有一个包含5个不同列的数据框:

         Test1   Test2   Test3  Test4  Test5 
Sample1  PASS    PASS    FAIL    WARN   WARN
Sample2  PASS    PASS    FAIL    PASS   WARN
Sample3  PASS    FAIL    FAIL    PASS   WARN
Sample4  PASS    FAIL    FAIL    PASS   WARN
Sample5  PASS    WARN    FAIL    WARN   WARN
Run Code Online (Sandbox Code Playgroud)

在每列中,为每个级别分配不同的因子.在第1栏中,"PASS"为1.在第2栏中,"PASS"为2,"FAIL为1.在第3栏中,"FAIL"为1.在第4栏中,"PASS"为1,"WARN"为2在第5栏中,"警告"是1.

按字母顺序执行它我需要"PASS"在所有列中为1,"WARN"在所有列中为2,并且在所有列中为"FAIL"3,以便我可以转换为矩阵并将其转换为热图.

目前,它根据特定列中显示的级别和字母顺序将因子分配给级别.

如何在整个数据框中保持不变?

r matrix dataframe r-factor

9
推荐指数
1
解决办法
4160
查看次数

标签 统计

r ×10

r-factor ×10

dataframe ×2

ggplot2 ×2

lm ×2

subset ×2

boxplot ×1

data.table ×1

matrix ×1

missing-data ×1

na ×1

unique ×1