我需要将连续变量拆分/分成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)
这将应用于大型数据集
我有一个矢量,例如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)这是一种实现结果的非常低效的方法
,欢迎任何更好的解决方案.
我有一个带有整数列的数据框,我想用它作为参考来创建一个新的分类变量.我想将变量分成三组并自己设置范围(即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) 我试图将一组变量转换为因子变量:变量质量的例子值是: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)
我该如何改进代码?
我有像1-10,10-20,20-30,30-40这样的小组.我有像"1,23,24,11,33,22,5,6,7,8,3,2"这样的数据我怎样才能知道每组中有多少
我有一些相当简单的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) 我有一个很大的百分比向量(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 ×7
vector ×2
continuous ×1
large-data ×1
loops ×1
performance ×1
r-faq ×1
split ×1
time ×1
variables ×1