相关疑难解决方法(0)

将连续变量分成相等大小的组

我需要将连续变量拆分/分成3个相等大小的组.

示例数据框

das <- data.frame(anim=1:15,
                  wt=c(181,179,180.5,201,201.5,245,246.4,
                       189.3,301,354,369,205,199,394,231.3))
Run Code Online (Sandbox Code Playgroud)

在被剪切后(根据值wt),我需要在新变量下面有3个类,wt2如下所示:

> das 
   anim    wt wt2
1     1 181.0   1
2     2 179.0   1
3     3 180.5   1
4     4 201.0   2
5     5 201.5   2
6     6 245.0   2
7     7 246.4   3
8     8 189.3   1
9     9 301.0   3
10   10 354.0   3
11   11 369.0   3
12   12 205.0   2
13   13 199.0   1
14   14 394.0   3
15   15 231.3   2
Run Code Online (Sandbox Code Playgroud)

这将应用于大型数据集

variables split r continuous

53
推荐指数
7
解决办法
10万
查看次数

如何将矢量划分为常规连续序列组?

我有一个矢量,例如c(1, 3, 4, 5, 9, 10, 17, 29, 30),我想将"相邻"元素组合在一起,形成一个规则的连续序列,在一个参差不齐的矢量中导致:

L1:1
L2:3,4,5
L3:9,10
L4:17
L5:29,30

朴素代码(前C程序员):

partition.neighbors <- function(v)
{
    result <<- list() #jagged array
    currentList <<- v[1] #current series

    for(i in 2:length(v))
    {
        if(v[i] - v [i-1] == 1)
        {
            currentList <<- c(currentList, v[i])
        }
        else
        {
            result <<- c(result, list(currentList))
            currentList <<- v[i] #next series
        }       
    }

    return(result)  
}
Run Code Online (Sandbox Code Playgroud)

现在我明白了

a)R不是C(尽管有大括号)
b)全局变量是纯粹的邪恶
c)这是一种实现结果的非常低效的方法

,欢迎任何更好的解决方案.

r vector data-partitioning

14
推荐指数
4
解决办法
3651
查看次数

根据范围在R中创建分类变量

我有一个带有整数列的数据框,我想用它作为参考来创建一个新的分类变量.我想将变量分成三组并自己设置范围(即0-5,6-10等).我试过cut但是根据正态分布将变量分成组,我的数据是正确的.我也尝试使用if/then语句,但这会输出一个真/假值,我想保留原始变量.我确信有一种简单的方法可以做到这一点,但我似乎无法弄明白.有关简单方法的任何建议吗?

我有这样的想法:

x   x.range
3   0-5
4   0-5
6   6-10
12  11-15
Run Code Online (Sandbox Code Playgroud)

r r-faq

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

因子变量:

我试图将一组变量转换为因子变量:变量质量的例子值是:3,4,5,6,7,8,9 我想要一个新的FACTORED变量qual_level,它具有低,中,高的值,

low <- quality(3,4)
medium<- quality(5,6,7)
high<- quality(8,9)
Run Code Online (Sandbox Code Playgroud)

因此我尝试实现以下代码.

q_levels <-  a <- factor (white_wine$quality ,
                      c(3,4,5.6,7,8,9,10), 
                      levels=1:3, 
                      labels=c("Low",  "Medium", "High"))
Run Code Online (Sandbox Code Playgroud)

上面的代码抛出一个错误:

Error in factor(white_wine$quality, c(3, 4, 5.6, 7, 8, 9, 10), levels = 1:3, : invalid 'labels'; length 3 should be 1 or 2
Run Code Online (Sandbox Code Playgroud)

我该如何改进代码?

r

3
推荐指数
1
解决办法
124
查看次数

在R中,如何将数据分配到不同的组中

我有像1-10,10-20,20-30,30-40这样的小组.我有像"1,23,24,11,33,22,5,6,7,8,3,2"这样的数据我怎样才能知道每组中有多少

r

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

当拥有大量数据[超过50万行]时,改善R中的循环以提高时间效率

我有一些相当简单的R代码需要10分钟-20分钟执行,我相信这是不必要的时间.数据由大约30列和500,000行的数据框组成.循环的目的是查看应该放入特定值的bin类型.

我试图通过在循环之前添加整个列来改进代码,在阅读关于该主题的一些其他线程之后在循环外进行一些计算,但这些方法都没有显着改进代码.

col_days <- Sys.Date() - as.Date(df$col)
i=1
while (i < length(df$col)){
  if (Sys.Date() - as.Date(df$col[i]) <366){
    df$col_bin[i] <- "Less than 1 year"
    i=i+1
  }

  else if (between(Sys.Date() - as.Date(df$col[i]), 366, 1095)){
    df$col_bin[i] <- "1 year to 3 years"
    i=i+1
  }
  else if (between(Sys.Date() - as.Date(df$col[i]), 1096, 1825)){
    df$col_bin[i] <- "3 years to 5 years"
    i=i+1
  }
  else if (between(Sys.Date() - as.Date(df$col[i]), 1826, 3650)){
    df$col_bin[i] <- "5 years to 10 years"
    i=i+1
  }
  else{
    df$col_bin[i] <- "More than 10 years" …
Run Code Online (Sandbox Code Playgroud)

performance time loops r large-data

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

计算R矢量中的值

我有一个很大的百分比向量(0-100),我试图计算它们中有多少是特定的20%桶(<20,20-40,40-60,60-80,80-100).向量的长度为129605,没有NA值.这是我的代码:

x<-c(0,0,0,0,0)
for(i in 1: length(mail_return))
{
    if (mail_return[i]<=20)
    {
        x[1] = x[1] + 1
    }
    if (mail_return[i]>20 && mail_return[i]<=40)
    {
        x[2] = x[2] + 1
    }
    if (mail_return[i]>40 && mail_return[i]<=60)
    {
        x[3] = x[3] + 1
    }
    if (mail_return[i]>60 && mail_return[i]<=80)
    {
        x[4] = x[4] + 1
    }
    else
    {   
        x[5] = x[5] + 1
    }
}
Run Code Online (Sandbox Code Playgroud)

但是sum(x)给我的长度是133171.不应该是向量的长度,129605?怎么了?

r vector

-8
推荐指数
1
解决办法
1114
查看次数