R 使用if语句并创建新列
因此,我想将数据帧的一个列向量(在我的示例中是年龄)中的条目转换为一个新的列向量(经验,我将其定义为经验=年龄-在校年限)。因此,我可以通过年龄计算出在学校的年数,有三个不同的等级,例如在我的例子中,26岁以下的人在学校里呆了14年(其他等级可以在下面的代码中看到)。为了找到经验,我会把这些放在一起 我运行了下面的代码,但得到了大量错误、混乱的提示符号和我不理解的关于parynthesis的条目。它只是给了我一个向量,所有的条目都是“12岁”,而不是我所希望的不同的乐队(一些是10岁,另一些是14岁)R 使用if语句并创建新列,r,R,因此,我想将数据帧的一个列向量(在我的示例中是年龄)中的条目转换为一个新的列向量(经验,我将其定义为经验=年龄-在校年限)。因此,我可以通过年龄计算出在学校的年数,有三个不同的等级,例如在我的例子中,26岁以下的人在学校里呆了14年(其他等级可以在下面的代码中看到)。为了找到经验,我会把这些放在一起 我运行了下面的代码,但得到了大量错误、混乱的提示符号和我不理解的关于parynthesis的条目。它只是给了我一个向量,所有的条目都是“12岁”,而不是我所希望的不同的乐队(一些是10岁,另一些是1
if(df[,4]<26){
df[,4]-14
}elseif(df[,4]<53){
df[,4]-12
}else(df[,4]-10)
任何帮助都将不胜感激 问题是
如果没有矢量化。相反,您可以在
时使用ifelse
或dplyr::case\u
使用一些随机示例数据:
set.seed(42)
df[1]6884449337
ifelse(df[,4]<26,df[,4]-14,ifelse(df[,4]<53,df[,4]-12,df[,4]-10))
#> [1] 58 74 32 83 25
dplyr::case_when(
df[,4]<26~df[,4]-14,
df[,4]<53~df[,4]-12,
真~df[,4]-10
)
#> [1] 58 74 32 83 25
您可以使用cut
加上一些索引来实现这一点,只需一行代码:
df$exp 147
#> 2 32
#> 3 42
#> 4 17
#> 5 63
#> 6 55
#> 7 28
#> 8 54
#> 9 62
#> 10 66
如果你真的这么做了
df$exp <- df$age - c(14, 12, 10)[as.numeric(cut(df$age, c(0, 25, 52, Inf)))]
由(v0.3.0)于2020年11月10日创建
df$exp <- df$age - c(14, 12, 10)[as.numeric(cut(df$age, c(0, 25, 52, Inf)))]
df
#> age exp
#> 1 47 35
#> 2 32 20
#> 3 42 30
#> 4 17 3
#> 5 63 53
#> 6 55 45
#> 7 28 16
#> 8 54 44
#> 9 62 52
#> 10 66 56