首页 > 解决方案 > 你好。我在执行下面的 r 代码以用另一个替换一个列值时陷入困境

问题描述

我想用限制值的 50% 替换金额列的值,以防金额超过限制。

cust_spend_trans[cust_spend_trans$Amount > cust_spend_trans$Limit, ] = (0.5*cust_spend_trans$Limit)

这给了我一个错误。

Error in `[<-.data.frame`(`*tmp*`, cust_spend_trans$Amount > cust_spend_trans$Limit,  : 
  replacement has 1500 items, need 6070

标签: r

解决方案


您的代码试图分配给所有列,因为您使用data[some_rows, ] = .... 相反,您需要data[some_rows, "Amount"] = ... 指定要为哪一列赋值:

cust_spend_trans[cust_spend_trans$Amount > cust_spend_trans$Limit, "Amount"] = (0.5*cust_spend_trans$Limit)

或者,去掉里面的逗号[并放在 $Amount开头,所以分配给列向量的一个子集data$Amount

cust_spend_trans$Amount[cust_spend_trans$Amount > cust_spend_trans$Limit] = (0.5*cust_spend_trans$Limit)

推荐阅读