如何在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
Zalazny7您好,感谢您的回复。它对值进行了处理和排序。唯一的是我不想排序值,我只想排序的水平。无论如何,我可以做到这一点? –
我做了d
请确保您正在执行该正则表达式并在您的因子水平上进行分割。不是值 – Zelazny7