r - 根据条件更改变量值

标签 r dataframe vectorization data-cleaning

我有数据框:

a<-c(1,2,3,4)
b<-c(1988,1970,1999,2000)
years_practicing<-rep(NA,4)
df<-data.frame("ID"=a, "grad_year"=b, "years_practicing"=years_practicing)

看起来像:

ID   grad_year    years_practicing
1     1988           NA
2     1970           NA
3     1999           NA
4     2000           NA

现在我想这样做(这是伪代码!):

if (ID=1 || ID=2) 
{
   years_practicing[corresponding cell]<-2017-grad_year
}

if (ID=3 || ID=4) 
{
   years_practicing[corresponding cell]<-2018-grad_year
}

实现这一目标:

ID   grad_year    years_practicing
1     1988           29
2     1970           47
3     1999           19
4     2000           18

我知道如何以过程方式(使用 while 循环和 if 语句)来完成,但我想以矢量化方式来完成。

我试过这个(和类似的变体):

year_2017_start<-c(1, 2)
year_2018_start<-c(3,4)
df$years_practicing[any(df$ID == year_2017_start)]<- 2017-df$grad_yr
df$years_practicing[any(df$ID == year_2018_start)]<- 2018-df$grad_yr

但是收到错误:

Error in df$years_practicing[any(df$ID == year_2017_start)] <- 2017 -  : 
  replacement has length zero
> df$years_practicing[any(df$ID == year_2018_start)]<- 2018-df$grad_yr
Error in df$years_practicing[any(df$ID == year_2018_start)] <- 2018 -  : 
  replacement has length zero

问题:

  1. 如何改进我的代码以使其工作。 (需要回答)

  2. 有没有更快的方法来达到类似的结果? (可选)

最佳答案

此单行代码仅使用基数 R。如果 ID 为 1 或 2,则显示的 %in% 表达式的计算结果为 TRUE,否则计算结果为 FALSE。从 2018 中减去时,它们分别转换为 1 和 0,然后我们从中减去 grad_year

transform(df, years_practicing = 2018 - (ID %in% 1:2) - grad_year)

给予:

  ID grad_year years_practicing
1  1      1988               29
2  2      1970               47
3  3      1999               19
4  4      2000               18

关于r - 根据条件更改变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57699242/

相关文章:

python - df2.loc ['average' ]= df2.mean() 给出 NaN 行?

performance - 仅计算矩阵平方的对角线的快速方法

r - 从另一个 df 中的字符串检测一个 df 中的多个字符串,如果检测到,则返回检测到的字符串

r - 使用卡方检验在文档特征矩阵中进行特征选择

r - 在 R 中查找 Flights 数据集中的比例

python - 如何根据一级最大值过滤 MultiIndex 数据帧?

r - 使用 HTML UI (index.html) 将交互式图表添加到 Shiny

python - 根据另一个 DataFrame 选择一个 DataFrame 的列

python - 计算几何级数上三角矩阵的最快方法(Python)

python - 重温嵌套的Python循环