如何在R中100个级别再现R的一个因子?

问题描述:

我有一个因子变量,有0和1的100个级别。例如:00000001,01000000,11000000,00010001.每个级别都有8个数字,分别为0和1。我想要做的是以1的总和从最小到最大的方式重新排列级别。例如,我希望10000000,01000000,00100000和其他级别只包含一个1.随后级别包含两个1,最多包含八个1。那是我可以自动做的,而不是手动做到的任何方式?如何在R中100个级别再现R的一个因子?

df[,1] <- factor(df[,1], levels=c("000", "001","100", "010","101","110","011","111"......)) 

虚拟数据

d <- c("00010001", "00000001", "01000000", "11000000") 

您可以使用gregexpr计算有多少1S是你的性格vecotr的每个条目。

num_ones <- lengths(gregexpr("1", d)) 
> num_ones 
[1] 2 1 1 2 

然后,您可以拆分您的矢量,按照数量进行分组。在每个组中,您可以选择减少或增加。最后,取消所有返回已排序向量的内容。

unlist(lapply(split(d, num_ones), sort)) 
> unlist(lapply(split(d, num_ones), sort)) 
     11   12   21   22 
"00000001" "01000000" "00010001" "11000000" 

您将此方法应用于您的因素他们重新排序的,像这样的水平:

d <- factor(c("00010001", "00000001", "01000000", "11000000")) 
lvls <- levels(d) 
num_ones <- lengths(gregexpr("1", lvls)) 
sorted <- unlist(lapply(split(lvls, num_ones), sort)) 

d <- factor(d, levels = sorted) 
> d 
[1] 00010001 00000001 01000000 11000000 
Levels: 00000001 01000000 00010001 11000000 
+0

Zalazny7您好,感谢您的回复。它对值进行了处理和排序。唯一的是我不想排序值,我只想排序的水平。无论如何,我可以做到这一点? –

+0

我做了d

+0

请确保您正在执行该正则表达式并在您的因子水平上进行分割。不是值 – Zelazny7