Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用if语句并创建新列_R - Fatal编程技术网

R 使用if语句并创建新列

R 使用if语句并创建新列,r,R,因此,我想将数据帧的一个列向量(在我的示例中是年龄)中的条目转换为一个新的列向量(经验,我将其定义为经验=年龄-在校年限)。因此,我可以通过年龄计算出在学校的年数,有三个不同的等级,例如在我的例子中,26岁以下的人在学校里呆了14年(其他等级可以在下面的代码中看到)。为了找到经验,我会把这些放在一起 我运行了下面的代码,但得到了大量错误、混乱的提示符号和我不理解的关于parynthesis的条目。它只是给了我一个向量,所有的条目都是“12岁”,而不是我所希望的不同的乐队(一些是10岁,另一些是1

因此,我想将数据帧的一个列向量(在我的示例中是年龄)中的条目转换为一个新的列向量(经验,我将其定义为经验=年龄-在校年限)。因此,我可以通过年龄计算出在学校的年数,有三个不同的等级,例如在我的例子中,26岁以下的人在学校里呆了14年(其他等级可以在下面的代码中看到)。为了找到经验,我会把这些放在一起

我运行了下面的代码,但得到了大量错误、混乱的提示符号和我不理解的关于parynthesis的条目。它只是给了我一个向量,所有的条目都是“12岁”,而不是我所希望的不同的乐队(一些是10岁,另一些是14岁)

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