标签: factors

清理因子水平(折叠多个级别/标签)

清理包含需要折叠的多个级别的因子的最有效(即有效/适当)方法是什么?也就是说,如何将两个或多个因子级别组合成一个.

这是一个示例,其中"是"和"Y"这两个级别应折叠为"是","否"和"N"折叠为"否":

## Given: 
x <- c("Y", "Y", "Yes", "N", "No", "H")   # The 'H' should be treated as NA

## expectedOutput
[1] Yes  Yes  Yes  No   No   <NA>
Levels: Yes No  # <~~ NOTICE ONLY **TWO** LEVELS
Run Code Online (Sandbox Code Playgroud)

一个选择当然是在手工使用sub和朋友之前清理琴弦.

另一种方法是允许重复标签,然后丢弃它们

## Duplicate levels ==> "Warning: deprecated"
x.f <- factor(x, levels=c("Y", "Yes", "No", "N"), labels=c("Yes", "Yes", "No", "No"))

## the above line can be wrapped in either of the next two lines
factor(x.f)      
droplevels(x.f) 
Run Code Online (Sandbox Code Playgroud)

但是,有更有效的方法吗?


虽然我知道levels …

r factors r-faq

53
推荐指数
5
解决办法
3万
查看次数

这个丑陋的号码

只有素数因子为2,3或5的数字称为丑陋数字.

例:

1,2,3,4,5,6,8,9,10,12,15 ......

1可以被认为是2 ^ 0.

我正在努力寻找第n个难看的数字.请注意,当n变大时,这些数字非常稀疏地分布.

我写了一个简单的程序来计算给定数字是否丑陋.对于n> 500 - 它变得超级慢.我尝试使用memoization - 观察:ugly_number*2,ugly_number*3,ugly_number*5都很难看.即便如此,它也很慢.我尝试使用log的一些属性 - 因为这会将这个问题从乘法减少到另外 - 但是,运气不大.想与大家分享这个.任何有趣的想法?

使用类似于"Eratosthenes的筛子"的概念(感谢Anon)

    for (int i(2), uglyCount(0); ; i++) {
            if (i % 2 == 0)
                    continue;
            if (i % 3 == 0)
                    continue;
            if (i % 5 == 0)
                    continue;
            uglyCount++;
            if (uglyCount == n - 1)
                    break;
    }
Run Code Online (Sandbox Code Playgroud)

我是第n个难看的数字.

即便这样也很慢.我想找到第1500个难看的数字.

algorithm math primes factors hamming-numbers

40
推荐指数
5
解决办法
2万
查看次数

如何将数据框的某些列转换为因子?

可能重复:
使用R识别或编码唯一因子

我和R有点麻烦

我有一个类似于以下的数据集,但更长.

A B Pulse
1 2 23
2 2 24
2 2 12
2 3 25
1 1 65
1 3 45
Run Code Online (Sandbox Code Playgroud)

基本上,前两列是编码的.A有1,2表示2个不同的权重. B有1,2,3代表3个不同的时间.

由于它们是编码数值,因此R将它们视为数值变量.我需要使用因子函数将这些变量转换为因子.

救命?

numerical r factors

39
推荐指数
2
解决办法
18万
查看次数

Eratosthenes的分段筛子?

制作一个简单的筛子很容易:

for (int i=2; i<=N; i++){
    if (sieve[i]==0){
        cout << i << " is prime" << endl;
        for (int j = i; j<=N; j+=i){
            sieve[j]=1;
        }
    }
    cout << i << " has " << sieve[i] << " distinct prime factors\n";
}
Run Code Online (Sandbox Code Playgroud)

但是当N非常大并且我无法在内存中保存那种数组时呢?我已经查找了分段筛选方法,它们似乎涉及到找到素数直到sqrt(N),但我不明白它是如何工作的.如果N非常大(例如10 ^ 18)怎么办?

algorithm primes sieve-of-eratosthenes prime-factoring factors

38
推荐指数
3
解决办法
3万
查看次数

为什么标签和级别的术语如此奇怪?

一个不可设置的函数的例子是labels.您只能在使用因子函数创建因子标签时设置它们.没有labels<-功能.不是因为'标签'和'水平'因素有任何意义....

>  fac <- factor(1:3, labels=c("one", "two", "three"))
> fac
[1] one   two   three
Levels: one two three
> labels(fac)
[1] "1" "2" "3"
Run Code Online (Sandbox Code Playgroud)

好吧,我问过标签,人们可能认为这是由因子调用设定的,但是我得到了一些东西......这个词是什么,不直观?

> levels(fac)
[1] "one"   "two"   "three"
Run Code Online (Sandbox Code Playgroud)

所以看来设置标签确实是设置级别.

>  fac <- factor(1:3, levels=c("one", "two", "three"))
> levels(fac)
[1] "one"   "two"   "three"
Run Code Online (Sandbox Code Playgroud)

好的,这是预期的.那么设置水平时标签是什么?

>  fac <- factor(1:3, levels=c("one", "two", "three"), labels=c("x","y", "z") )
> labels(fac)
[1] "1" "2" "3"
> levels(fac)
[1] "x" "y" "z"
Run Code Online (Sandbox Code Playgroud)

如果你问我,会很奇怪.似乎因素的"标签"参数胜过级别规范的任何"级别"参数.为什么会这样?看起来像一个混乱的术语.为什么labels()返回我想象的用as.character(as.numeric(fac))检索的东西?

(这是一个切向评论[标记为]在早期的关于赋值函数的答案中,我被要求转移到一个问题.所以这是你有机会启发我.)

r levels factors

34
推荐指数
2
解决办法
1675
查看次数

为什么我的Swift循环失败并显示错误"无法在结束<start时形成范围"?

我有一个for循环,它检查一个数字是否是一个数字的因子,然后检查该因子是否为素数,然后将它添加到数组.根据原始号码,我会收到错误消息

致命错误:无法使用end <start形成范围

这几乎每次都会发生,但对于某些数字,它可以正常工作.我发现使用它的唯一数字是9,15和25.

这是代码:

let num = 16 // or any Int
var primes = [Int]()

for i in 2...(num/2) {

    if ((num % i) == 0) {
        var isPrimeFactor = true

        for l in 2...i-1 {
            if ((i%l) == 0) {
                isPrimeFactor = false;
            }//end if
        }//end for

        if (isPrimeFactor == true) {
            primes.append(i)
        }//end if

    }//end if

}//end for
Run Code Online (Sandbox Code Playgroud)

for-loop runtime-error factors swift

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

从ggplot条形图中删除未使用的因子水平

我想做这个问题的反面,并且与这个问题相反,尽管这是关于传说,而不是情节本身.

其他SO问题似乎在询问如何保持未使用的因子水平.我实际上喜欢我的删除.我有几个名称变量和几个列(宽格式)的变量属性,我用它来创建多个条形图.这是一个可重复的例子:

library(ggplot2)
df <- data.frame(name=c("A","B","C"), var1=c(1,NA,2),var2=c(3,4,5))
ggplot(df, aes(x=name,y=var1)) + geom_bar()
Run Code Online (Sandbox Code Playgroud)

我明白了:

在此输入图像描述

我只想在我的条形图中显示具有相应var n的名称(因为,B中没有空白空间).

如果我可以简单地更改输出文件名和y=var位,则重用基本绘图代码将非常容易.我希望不必对我的数据框进行子集,只是为了尽可能在每个绘图的结果上使用droplevels!


根据na.omit()建议更新

考虑修订的数据集:

library(ggplot2)
df <- data.frame(name=c("A","B","C"), var1=c(1,NA,2),var2=c(3,4,5), var3=c(NA,6,7))
ggplot(df, aes(x=name,y=var1)) + geom_bar()
Run Code Online (Sandbox Code Playgroud)

我需要na.omit()用于绘图,var1因为存在NA.但是由于na.omit确保所有列都存在值,因此该图A也会删除,因为它具有NA var3.这更类似于我的数据.我总共响应了15个NAs.我只想删除没有当前绘制的y向量值的因子级别,而不是在整个数据帧中的任何向量中都有NA .

plot r factors ggplot2

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

查找给定整数的所有精确除数的算法

我想找到一个数字的所有精确除数.目前我有这个:

{
   int n;
   int i=2;
   scanf("%d",&n);
   while(i<=n/2)
    {
        if(n%i==0)
                  printf("%d,",i);
        i++;
     }
   getch();
}
Run Code Online (Sandbox Code Playgroud)

有没有办法改善它?

c algorithm performance numbers factors

19
推荐指数
1
解决办法
5万
查看次数

将具有N个类别的分类因子重新编码为N个二进制列

原始数据框:

v1 = sample(letters[1:3], 10, replace=TRUE)
v2 = sample(letters[1:3], 10, replace=TRUE)
df = data.frame(v1,v2)
df
Run Code Online (Sandbox Code Playgroud)
   v1 v2
1   b  c
2   a  a
3   c  c
4   b  a
5   c  c
6   c  b
7   a  a
8   a  b
9   a  c
10  a  b

新数据框:

new_df = data.frame(row.names=rownames(df))
for (i in colnames(df)) {
    for (x in letters[1:3]) {
        #new_df[x] = as.numeric(df[i] == x)
        new_df[paste0(i, "_", x)] = as.numeric(df[i] == x)
    }
}
Run Code Online (Sandbox Code Playgroud)
   v1_a v1_b v1_c v2_a v2_b …

r factors dataframe

17
推荐指数
2
解决办法
3万
查看次数

重塑数据框以将因子转换为R中的列

我有一个数据框,其中一个特定列具有一组特定值(比方说,1,2,...,23).我想要做的是从这个布局转换为一个框架,其中框架将有额外的23(在这种情况下)列,每个列代表一个因子值.这些列中的数据将是布尔值,表示特定行是否具有给定的因子值...要显示特定示例:

来源框架:

ID       DATE         SECTOR
123      2008-01-01   1
456      2008-01-01   3
789      2008-01-02   5
... <more records with SECTOR values from 1 to 5>
Run Code Online (Sandbox Code Playgroud)

所需格式:

ID       DATE         SECTOR.1   SECTOR.2   SECTOR.3   SECTOR.4   SECTOR.5
123      2008-01-01      T          F          F          F          F
456      2008-01-01      F          F          T          F          F
789      2008-01-02      F          F          F          F          T
Run Code Online (Sandbox Code Playgroud)

我在循环中做这个没有问题,但我希望有更好的方法.到目前为止reshape()没有产生预期的结果.非常感谢帮助.

r factors reshape

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