Dataframe 从R中的数字列向量创建因子
我在Dataframe 从R中的数字列向量创建因子,dataframe,r,for-loop,factors,dplyr,Dataframe,R,For Loop,Factors,Dplyr,我在df中有一个权重的数字列(df$weight0)。我想创建一个新列df$weight1,它是一个基于df$weight0中的值的因子 如果df$weight0中的值小于或等于170,则df$weight1中的相应值应为1,但如果df$weight0中的值大于170,则df$weight1中的相应值应为2 下面的代码是我尝试过的,但它给出的是单个值,而不是向量 if (i<=170){ i==1 }else{ i==2 } } if(iifelse可以使用矢
df
中有一个权重的数字列(df$weight0
)。我想创建一个新列df$weight1
,它是一个基于df$weight0
中的值的因子
如果df$weight0
中的值小于或等于170,则df$weight1
中的相应值应为1,但如果df$weight0
中的值大于170,则df$weight1
中的相应值应为2
下面的代码是我尝试过的,但它给出的是单个值,而不是向量
if (i<=170){
i==1
}else{
i==2
}
}
if(iifelse
可以使用矢量化输入:
df$weight1 <- ifelse(df$weight0<=170,1,2)
df$weight1ifelse
可以使用矢量化输入:
df$weight1 <- ifelse(df$weight0<=170,1,2)
df$weight1您检查的是i的值,而不是df中的值。此外,未实现新列的赋值。请尝试以下操作
for (i in wcgs$weight0){
if (wcgs$weight0[i]<=170){
wcgs$weight1[i] <- 1
}else{
wcgs$weight1[i] <- 2
}
}
for(i在wcgs$weight0中){
如果(wcgs$weight0[i]您检查的是i的值,而不是df中的值。此外,未实现新列的赋值。请尝试以下操作
for (i in wcgs$weight0){
if (wcgs$weight0[i]<=170){
wcgs$weight1[i] <- 1
}else{
wcgs$weight1[i] <- 2
}
}
for(i在wcgs$weight0中){
如果(wcgs$weight0[i]使用软件包中的case\u时:
库(dplyr)
当(df$weight0=<170~1,
df$权重0>170~2)
case\u-when()
有助于制定if-else
构造和mutate()
修改或添加列。使用包中的case\u-when
:
库(dplyr)
当(df$weight0=<170~1,
df$权重0>170~2)
case\u when()
有助于制定if else
构造和mutate()
修改或添加列。使用cut()
按间隔离散连续变量
对于这种区间分类,有一个非常有用的函数cut
nums <- nums <- runif(100, min=0, max=300) # n = 100 random numbers between 0 and 300
factorized_num <- cut(nums, c(-Inf, 170, +Inf))
# you can name the categories as you want:
levels(factorized_num) <- c(1, 2) # first interval 1, next interval 2
# with include.lowest=TRUE or FALSE you can determine whether lower limit is <= or <
现在您可以使用它:
categories <- categorize(nums)
head(categories) ## 1 2 1 1 ...
类别使用cut()
按间隔离散连续变量
对于这种区间分类,有一个非常有用的函数cut
nums <- nums <- runif(100, min=0, max=300) # n = 100 random numbers between 0 and 300
factorized_num <- cut(nums, c(-Inf, 170, +Inf))
# you can name the categories as you want:
levels(factorized_num) <- c(1, 2) # first interval 1, next interval 2
# with include.lowest=TRUE or FALSE you can determine whether lower limit is <= or <
现在您可以使用它:
categories <- categorize(nums)
head(categories) ## 1 2 1 1 ...
categoriesdf$weight1 170)+1
df$weight1 170)+1
谢谢大家。我尝试了切割方法wcgs$w8tnice!最好是你包括/命名所有限制(如果没有限制,-Inf
和+Inf
因此很有用)。谢谢大家。我尝试过使用cut方法wcgs$w8tnice!最好是包含/命名所有限制(如果没有限制,-Inf
和+Inf
因此非常有用)。谢谢。因此我使用wcgs$weight1[I]更改该索引的值。因此,我使用wcgs$weight1[I]更改该索引的值